{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Tce3stUlHN0L"
      },
      "source": [
        "##### Copyright 2025 Google LLC."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {
        "cellView": "form",
        "id": "tuOe1ymfHZPu"
      },
      "outputs": [],
      "source": [
        "# @title Licensed under the Apache License, Version 2.0 (the \"License\");\n",
        "# you may not use this file except in compliance with the License.\n",
        "# You may obtain a copy of the License at\n",
        "#\n",
        "# https://www.apache.org/licenses/LICENSE-2.0\n",
        "#\n",
        "# Unless required by applicable law or agreed to in writing, software\n",
        "# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
        "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
        "# See the License for the specific language governing permissions and\n",
        "# limitations under the License."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "STuxHh6kk3eL"
      },
      "source": [
        "# Classify text with embeddings\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "wUmTFPw2W_UD"
      },
      "source": [
        "<a target=\"_blank\" href=\"https://colab.research.google.com/github/google-gemini/cookbook/blob/main/examples/Classify_text_with_embeddings.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" height=30/></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "bbf4f2c17530"
      },
      "source": [
        "<!-- Princing warning Badge -->\n",
        "<table>\n",
        "  <tr>\n",
        "    <!-- Emoji -->\n",
        "    <td bgcolor=\"#f5949e\">\n",
        "      <font size=30>⚠️</font>\n",
        "    </td>\n",
        "    <!-- Text Content Cell -->\n",
        "    <td bgcolor=\"#f5949e\">\n",
        "      <h3><font color=black>This notebook requires paid tier rate limits to run properly.<br>  \n",
        "(cf. <a href=\"https://ai.google.dev/pricing#veo2\"><font color='#217bfe'>pricing</font></a> for more details).</font></h3>\n",
        "    </td>\n",
        "  </tr>\n",
        "</table>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "bhT1u-Pof10V"
      },
      "source": [
        "## Overview\n",
        "\n",
        "In this notebook, you'll learn to use the embeddings produced by the Gemini API to train a model that can classify different types of newsgroup posts based on the topic.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "FXq0ygI3BCdQ"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "\u001b[?25l   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/149.6 kB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r\u001b[2K   \u001b[91m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[90m╺\u001b[0m\u001b[90m━\u001b[0m \u001b[32m143.4/149.6 kB\u001b[0m \u001b[31m12.7 MB/s\u001b[0m eta \u001b[36m0:00:01\u001b[0m\r\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m149.6/149.6 kB\u001b[0m \u001b[31m3.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25h"
          ]
        }
      ],
      "source": [
        "!pip install -U -q google-genai"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "_mwJYXpElYJc"
      },
      "source": [
        "### Grab an API Key\n",
        "\n",
        "Before you can use the Gemini API, you must first obtain an API key. If you don't already have one, create a key with one click in Google AI Studio.\n",
        "\n",
        "<a class=\"button button-primary\" href=\"https://aistudio.google.com/app/apikey\" target=\"_blank\" rel=\"noopener noreferrer\">Get an API key</a>\n",
        "\n",
        "In Colab, add the key to the secrets manager under the \"🔑\" in the left panel. Give it the name `GEMINI_API_KEY`.\n",
        "\n",
        "Once you have the API key, pass it to the SDK. You can do this in two ways:\n",
        "\n",
        "* Put the key in the `GEMINI_API_KEY` environment variable (the SDK will automatically pick it up from there).\n",
        "* Pass the key to `genai.Client(api_key=...)`"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "tayrk_A2lZ7A"
      },
      "outputs": [],
      "source": [
        "from google import genai\n",
        "from google.genai import types\n",
        "\n",
        "# Used to securely store your API key\n",
        "from google.colab import userdata\n",
        "\n",
        "# Or use `os.getenv('GEMINI_API_KEY')` to fetch an environment variable.\n",
        "GEMINI_API_KEY=userdata.get('GEMINI_API_KEY')\n",
        "\n",
        "client = genai.Client(api_key=GEMINI_API_KEY)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "770568288dd5"
      },
      "source": [
        "Key Point: Next, you will choose a model. Any embedding model will work for this tutorial, but for real applications it's important to choose a specific model and stick with it. The outputs of different models are not compatible with each other."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "metadata": {
        "id": "ce769c35a622"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "models/embedding-001\n",
            "models/text-embedding-004\n",
            "models/gemini-embedding-exp-03-07\n",
            "models/gemini-embedding-exp\n",
            "models/gemini-embedding-001\n"
          ]
        }
      ],
      "source": [
        "for m in client.models.list():\n",
        "  if 'embedContent' in m.supported_actions:\n",
        "    print(m.name)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "d6fa32bbaa20"
      },
      "source": [
        "### Select the model to be used"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {
        "id": "fc0698cc90e2"
      },
      "outputs": [],
      "source": [
        "MODEL_ID = \"gemini-embedding-001\" # @param [\"gemini-embedding-001\", \"text-embedding-004\"] {\"allow-input\":true, isTemplate: true}"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "C5B9sWq0hNEV"
      },
      "source": [
        "## Prepare the dataset\n",
        "\n",
        "The [20 Newsgroups Text Dataset](https://scikit-learn.org/0.19/datasets/twenty_newsgroups.html) contains 18,000 newsgroups posts on 20 topics divided into training and test sets. The split between the training and test datasets are based on messages posted before and after a specific date. For this tutorial, you will be using the subsets of the training and test datasets. You will preprocess and organize the data into Pandas dataframes."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "metadata": {
        "id": "jDoKis4om-Ea"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "['alt.atheism',\n",
              " 'comp.graphics',\n",
              " 'comp.os.ms-windows.misc',\n",
              " 'comp.sys.ibm.pc.hardware',\n",
              " 'comp.sys.mac.hardware',\n",
              " 'comp.windows.x',\n",
              " 'misc.forsale',\n",
              " 'rec.autos',\n",
              " 'rec.motorcycles',\n",
              " 'rec.sport.baseball',\n",
              " 'rec.sport.hockey',\n",
              " 'sci.crypt',\n",
              " 'sci.electronics',\n",
              " 'sci.med',\n",
              " 'sci.space',\n",
              " 'soc.religion.christian',\n",
              " 'talk.politics.guns',\n",
              " 'talk.politics.mideast',\n",
              " 'talk.politics.misc',\n",
              " 'talk.religion.misc']"
            ]
          },
          "execution_count": 4,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from sklearn.datasets import fetch_20newsgroups\n",
        "newsgroups_train = fetch_20newsgroups(subset='train')\n",
        "newsgroups_test = fetch_20newsgroups(subset='test')\n",
        "\n",
        "# View list of class names for dataset\n",
        "newsgroups_train.target_names"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "hDz9MjkNl_FD"
      },
      "source": [
        "Here is an example of what a data point from the training set looks like."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "metadata": {
        "id": "FPq-56AimOPX"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Lines: 15\n",
            "\n",
            " I was wondering if anyone out there could enlighten me on this car I saw\n",
            "the other day. It was a 2-door sports car, looked to be from the late 60s/\n",
            "early 70s. It was called a Bricklin. The doors were really small. In addition,\n",
            "the front bumper was separate from the rest of the body. This is \n",
            "all I know. If anyone can tellme a model name, engine specs, years\n",
            "of production, where this car is made, history, or whatever info you\n",
            "have on this funky looking car, please e-mail.\n",
            "\n",
            "Thanks,\n",
            "- IL\n",
            "   ---- brought to you by your neighborhood Lerxst ----\n",
            "\n",
            "\n",
            "\n",
            "\n",
            "\n"
          ]
        }
      ],
      "source": [
        "idx = newsgroups_train.data[0].index('Lines')\n",
        "print(newsgroups_train.data[0][idx:])"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "A9-DD7wgCx8j"
      },
      "source": [
        "Now you will begin preprocessing the data for this tutorial. Remove any sensitive information like names, email, or redundant parts of the text like `\"From: \"` and `\"\\nSubject: \"`. Organize the information into a Pandas dataframe so it is more readable."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "metadata": {
        "id": "urpLwp3UmPF3"
      },
      "outputs": [],
      "source": [
        "import re\n",
        "import pandas as pd\n",
        "\n",
        "def preprocess_newsgroup_data(newsgroup_dataset):\n",
        "  # Apply functions to remove names, emails, and extraneous words from data points in newsgroups.data\n",
        "  newsgroup_dataset.data = [re.sub(r'[\\w\\.-]+@[\\w\\.-]+', '', d) for d in newsgroup_dataset.data] # Remove email\n",
        "  newsgroup_dataset.data = [re.sub(r\"\\([^()]*\\)\", \"\", d) for d in newsgroup_dataset.data] # Remove names\n",
        "  newsgroup_dataset.data = [d.replace(\"From: \", \"\") for d in newsgroup_dataset.data] # Remove \"From: \"\n",
        "  newsgroup_dataset.data = [d.replace(\"\\nSubject: \", \"\") for d in newsgroup_dataset.data] # Remove \"\\nSubject: \"\n",
        "\n",
        "  # Cut off each text entry after 5,000 characters\n",
        "  newsgroup_dataset.data = [d[0:5000] if len(d) > 5000 else d for d in newsgroup_dataset.data]\n",
        "\n",
        "  # Put data points into dataframe\n",
        "  df_processed = pd.DataFrame(newsgroup_dataset.data, columns=['Text'])\n",
        "  df_processed['Label'] = newsgroup_dataset.target\n",
        "  # Match label to target name index\n",
        "  df_processed['Class Name'] = ''\n",
        "  for idx, row in df_processed.iterrows():\n",
        "    df_processed.at[idx, 'Class Name'] = newsgroup_dataset.target_names[row['Label']]\n",
        "\n",
        "  return df_processed"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "metadata": {
        "id": "JMKddQdNnAOV"
      },
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Text</th>\n",
              "      <th>Label</th>\n",
              "      <th>Class Name</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>WHAT car is this!?\\nNntp-Posting-Host: rac3.w...</td>\n",
              "      <td>7</td>\n",
              "      <td>rec.autos</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>SI Clock Poll - Final Call\\nSummary: Final ca...</td>\n",
              "      <td>4</td>\n",
              "      <td>comp.sys.mac.hardware</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>PB questions...\\nOrganization: Purdue Univers...</td>\n",
              "      <td>4</td>\n",
              "      <td>comp.sys.mac.hardware</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>Re: Weitek P9000 ?\\nOrganization: Harris Comp...</td>\n",
              "      <td>1</td>\n",
              "      <td>comp.graphics</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>Re: Shuttle Launch Question\\nOrganization: Sm...</td>\n",
              "      <td>14</td>\n",
              "      <td>sci.space</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "                                                Text  Label  \\\n",
              "0   WHAT car is this!?\\nNntp-Posting-Host: rac3.w...      7   \n",
              "1   SI Clock Poll - Final Call\\nSummary: Final ca...      4   \n",
              "2   PB questions...\\nOrganization: Purdue Univers...      4   \n",
              "3   Re: Weitek P9000 ?\\nOrganization: Harris Comp...      1   \n",
              "4   Re: Shuttle Launch Question\\nOrganization: Sm...     14   \n",
              "\n",
              "              Class Name  \n",
              "0              rec.autos  \n",
              "1  comp.sys.mac.hardware  \n",
              "2  comp.sys.mac.hardware  \n",
              "3          comp.graphics  \n",
              "4              sci.space  "
            ]
          },
          "execution_count": 7,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "# Apply preprocessing function to training and test datasets\n",
        "df_train = preprocess_newsgroup_data(newsgroups_train)\n",
        "df_test = preprocess_newsgroup_data(newsgroups_test)\n",
        "\n",
        "df_train.head()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "ogEGbg5XDv-T"
      },
      "source": [
        "Next, you will sample some of the data by taking 100 data points in the training dataset, and dropping a few of the categories to run through this tutorial. Choose the science categories to compare."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "metadata": {
        "id": "C2N7xXhJohLR"
      },
      "outputs": [],
      "source": [
        "def sample_data(df, num_samples, classes_to_keep):\n",
        "  df = df.groupby('Label', as_index = False).apply(lambda x: x.sample(num_samples)).reset_index(drop=True)\n",
        "\n",
        "  df = df[df['Class Name'].str.contains(classes_to_keep)]\n",
        "\n",
        "  # Reset the encoding of the labels after sampling and dropping certain categories\n",
        "  df['Class Name'] = df['Class Name'].astype('category')\n",
        "  df['Encoded Label'] = df['Class Name'].cat.codes\n",
        "\n",
        "  return df"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "metadata": {
        "id": "jS2g_ZGupBUb"
      },
      "outputs": [
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "/tmp/ipykernel_190557/1286960996.py:2: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n",
            "  df = df.groupby('Label', as_index = False).apply(lambda x: x.sample(num_samples)).reset_index(drop=True)\n",
            "/tmp/ipykernel_190557/1286960996.py:2: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n",
            "  df = df.groupby('Label', as_index = False).apply(lambda x: x.sample(num_samples)).reset_index(drop=True)\n"
          ]
        }
      ],
      "source": [
        "TRAIN_NUM_SAMPLES = 100\n",
        "TEST_NUM_SAMPLES = 25\n",
        "CLASSES_TO_KEEP = 'sci' # Class name should contain 'sci' in it to keep science categories\n",
        "df_train = sample_data(df_train, TRAIN_NUM_SAMPLES, CLASSES_TO_KEEP)\n",
        "df_test = sample_data(df_test, TEST_NUM_SAMPLES, CLASSES_TO_KEEP)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 10,
      "metadata": {
        "id": "j04TMPY8rV5q"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "Class Name\n",
              "sci.crypt          100\n",
              "sci.electronics    100\n",
              "sci.med            100\n",
              "sci.space          100\n",
              "Name: count, dtype: int64"
            ]
          },
          "execution_count": 10,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "df_train.value_counts('Class Name')"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 11,
      "metadata": {
        "id": "qMsnfkVDsJlU"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "Class Name\n",
              "sci.crypt          25\n",
              "sci.electronics    25\n",
              "sci.med            25\n",
              "sci.space          25\n",
              "Name: count, dtype: int64"
            ]
          },
          "execution_count": 11,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "df_test.value_counts('Class Name')"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Kr-WlKzXjYWn"
      },
      "source": [
        "## Generate the embeddings\n",
        "\n",
        "In this section, you will see how to generate embeddings for the different texts in the dataframe using the embeddings from the Gemini API.\n",
        "\n",
        "The Gemini embedding model supports several task types, each tailored for a specific goal. Here’s a general overview of the available types and their applications:\n",
        "\n",
        "Task Type | Description\n",
        "---       | ---\n",
        "RETRIEVAL_QUERY\t| Specifies the given text is a query in a search/retrieval setting.\n",
        "RETRIEVAL_DOCUMENT | Specifies the given text is a document in a search/retrieval setting.\n",
        "SEMANTIC_SIMILARITY\t| Specifies the given text will be used for Semantic Textual Similarity (STS).\n",
        "CLASSIFICATION\t| Specifies that the embeddings will be used for classification.\n",
        "CLUSTERING\t| Specifies that the embeddings will be used for clustering."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 18,
      "metadata": {
        "id": "MTBGKkPQsotz"
      },
      "outputs": [],
      "source": [
        "from tqdm.auto import tqdm\n",
        "from google.genai import types\n",
        "\n",
        "tqdm.pandas()\n",
        "\n",
        "import numpy as np\n",
        "import math\n",
        "\n",
        "def make_embed_text_fn(model):\n",
        "\n",
        "    def embed_fn(texts: list[str]) -> list[list[float]]:\n",
        "        # Set the task_type to CLASSIFICATION and embed the batch of texts\n",
        "        result = client.models.embed_content(model=model,\n",
        "                                            contents=[texts],\n",
        "                                            config=types.EmbedContentConfig(\n",
        "                                                task_type=\"CLASSIFICATION\")).embeddings\n",
        "        return np.array([embedding.values for embedding in result])\n",
        "\n",
        "    return embed_fn\n",
        "\n",
        "\n",
        "def create_embeddings(df):\n",
        "    embed_fn = make_embed_text_fn(MODEL_ID)\n",
        "\n",
        "    batch_size = 25  # at most 25 requests can be in one batch\n",
        "    all_embeddings = []\n",
        "\n",
        "    # Loop over the texts in chunks of batch_size\n",
        "    for i in tqdm(range(0, len(df), batch_size)):\n",
        "        batch = df[\"Text\"].iloc[i : i + batch_size].tolist()\n",
        "        embeddings = embed_fn(batch)\n",
        "        all_embeddings.extend(embeddings)\n",
        "\n",
        "    df[\"Embeddings\"] = all_embeddings\n",
        "    return df"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 21,
      "metadata": {
        "id": "7f3ba283946c"
      },
      "outputs": [],
      "source": [
        "import numpy as np\n",
        "from tqdm.auto import tqdm\n",
        "tqdm.pandas()\n",
        "\n",
        "\n",
        "def make_embed_text_fn(model):\n",
        "\n",
        "  def embed_fn(text: str) -> list[float]:\n",
        "    # Set the task_type to CLASSIFICATION.\n",
        "    result = client.models.embed_content(model=model,\n",
        "                                            contents=text,\n",
        "                                            config=types.EmbedContentConfig(\n",
        "                                                task_type=\"CLASSIFICATION\"))\n",
        "    return np.array(result.embeddings[0].values)\n",
        "\n",
        "  return embed_fn\n",
        "\n",
        "def create_embeddings(df):\n",
        "  df['Embeddings'] = df['Text'].progress_apply(make_embed_text_fn(MODEL_ID))\n",
        "  return df"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "21f96bc252b6"
      },
      "source": [
        "Preparing the training dataset:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 24,
      "metadata": {
        "id": "a4e014a4b09a"
      },
      "outputs": [
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "100%|██████████| 400/400 [03:35<00:00,  1.86it/s]\n"
          ]
        },
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Text</th>\n",
              "      <th>Label</th>\n",
              "      <th>Class Name</th>\n",
              "      <th>Encoded Label</th>\n",
              "      <th>Embeddings</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>1100</th>\n",
              "      <td>Re: White House Public Encryption Management ...</td>\n",
              "      <td>11</td>\n",
              "      <td>sci.crypt</td>\n",
              "      <td>0</td>\n",
              "      <td>[-0.01012141, -0.0051694787, 0.0047423732, -0....</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1101</th>\n",
              "      <td>DES: init vector as additional key?\\nKeywords...</td>\n",
              "      <td>11</td>\n",
              "      <td>sci.crypt</td>\n",
              "      <td>0</td>\n",
              "      <td>[-0.023827964, -0.008963956, -0.0052384217, -0...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1102</th>\n",
              "      <td>Clipper Chip - How would it work?\\nOrganizati...</td>\n",
              "      <td>11</td>\n",
              "      <td>sci.crypt</td>\n",
              "      <td>0</td>\n",
              "      <td>[-0.027112009, -0.016536575, 0.013272242, -0.0...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1103</th>\n",
              "      <td>Re: Would \"clipper\" make a good cover for oth...</td>\n",
              "      <td>11</td>\n",
              "      <td>sci.crypt</td>\n",
              "      <td>0</td>\n",
              "      <td>[-0.009721769, -0.0026513913, 0.00159029, -0.0...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1104</th>\n",
              "      <td>* REPORT ON PRIVACY-PROTECTING OFF-LINE CASH ...</td>\n",
              "      <td>11</td>\n",
              "      <td>sci.crypt</td>\n",
              "      <td>0</td>\n",
              "      <td>[-0.0019142096, -0.01807762, 0.004153099, -0.0...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>...</th>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1495</th>\n",
              "      <td>Re: Biosphere II\\nReply-To: \\nDisclaimer: Thi...</td>\n",
              "      <td>14</td>\n",
              "      <td>sci.space</td>\n",
              "      <td>3</td>\n",
              "      <td>[-0.0027465916, -0.009631713, 0.006647122, -0....</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1496</th>\n",
              "      <td>Re: space news from Feb 1 AW&amp;ST\\nNntp-Posting...</td>\n",
              "      <td>14</td>\n",
              "      <td>sci.space</td>\n",
              "      <td>3</td>\n",
              "      <td>[-0.016138315, 0.011859794, 0.006195726, -0.04...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1497</th>\n",
              "      <td>Re: Vandalizing the sky.\\nIn-Reply-To: 's mes...</td>\n",
              "      <td>14</td>\n",
              "      <td>sci.space</td>\n",
              "      <td>3</td>\n",
              "      <td>[-0.010342497, -0.004649389, 0.01676999, -0.06...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1498</th>\n",
              "      <td>Re: Vandalizing the sky.\\nOrganization: Unive...</td>\n",
              "      <td>14</td>\n",
              "      <td>sci.space</td>\n",
              "      <td>3</td>\n",
              "      <td>[-0.008992054, -0.007147352, 0.0055692485, -0....</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1499</th>\n",
              "      <td>Re: So I'm an idiot, what else is new?\\nOrigi...</td>\n",
              "      <td>14</td>\n",
              "      <td>sci.space</td>\n",
              "      <td>3</td>\n",
              "      <td>[0.003493203, -0.0042175553, -0.0029711807, -0...</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>400 rows × 5 columns</p>\n",
              "</div>"
            ],
            "text/plain": [
              "                                                   Text  Label Class Name  \\\n",
              "1100   Re: White House Public Encryption Management ...     11  sci.crypt   \n",
              "1101   DES: init vector as additional key?\\nKeywords...     11  sci.crypt   \n",
              "1102   Clipper Chip - How would it work?\\nOrganizati...     11  sci.crypt   \n",
              "1103   Re: Would \"clipper\" make a good cover for oth...     11  sci.crypt   \n",
              "1104   * REPORT ON PRIVACY-PROTECTING OFF-LINE CASH ...     11  sci.crypt   \n",
              "...                                                 ...    ...        ...   \n",
              "1495   Re: Biosphere II\\nReply-To: \\nDisclaimer: Thi...     14  sci.space   \n",
              "1496   Re: space news from Feb 1 AW&ST\\nNntp-Posting...     14  sci.space   \n",
              "1497   Re: Vandalizing the sky.\\nIn-Reply-To: 's mes...     14  sci.space   \n",
              "1498   Re: Vandalizing the sky.\\nOrganization: Unive...     14  sci.space   \n",
              "1499   Re: So I'm an idiot, what else is new?\\nOrigi...     14  sci.space   \n",
              "\n",
              "      Encoded Label                                         Embeddings  \n",
              "1100              0  [-0.01012141, -0.0051694787, 0.0047423732, -0....  \n",
              "1101              0  [-0.023827964, -0.008963956, -0.0052384217, -0...  \n",
              "1102              0  [-0.027112009, -0.016536575, 0.013272242, -0.0...  \n",
              "1103              0  [-0.009721769, -0.0026513913, 0.00159029, -0.0...  \n",
              "1104              0  [-0.0019142096, -0.01807762, 0.004153099, -0.0...  \n",
              "...             ...                                                ...  \n",
              "1495              3  [-0.0027465916, -0.009631713, 0.006647122, -0....  \n",
              "1496              3  [-0.016138315, 0.011859794, 0.006195726, -0.04...  \n",
              "1497              3  [-0.010342497, -0.004649389, 0.01676999, -0.06...  \n",
              "1498              3  [-0.008992054, -0.007147352, 0.0055692485, -0....  \n",
              "1499              3  [0.003493203, -0.0042175553, -0.0029711807, -0...  \n",
              "\n",
              "[400 rows x 5 columns]"
            ]
          },
          "execution_count": 24,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "df_train = create_embeddings(df_train)\n",
        "df_train"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 25,
      "metadata": {
        "id": "f0fb41e68ac8"
      },
      "outputs": [
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "100%|██████████| 100/100 [00:50<00:00,  1.99it/s]\n"
          ]
        },
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Text</th>\n",
              "      <th>Label</th>\n",
              "      <th>Class Name</th>\n",
              "      <th>Encoded Label</th>\n",
              "      <th>Embeddings</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>275</th>\n",
              "      <td>Re: THE CLIPPER CHIP: A TECHNICAL SUMMARY\\nOr...</td>\n",
              "      <td>11</td>\n",
              "      <td>sci.crypt</td>\n",
              "      <td>0</td>\n",
              "      <td>[0.0008749933, -0.009894153, 0.0068213255, -0....</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>276</th>\n",
              "      <td>Amiga RIPEM?\\nReply-To: \\nOrganization: Emory...</td>\n",
              "      <td>11</td>\n",
              "      <td>sci.crypt</td>\n",
              "      <td>0</td>\n",
              "      <td>[-0.022581104, -0.0037767778, -0.0035728822, -...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>277</th>\n",
              "      <td>Wiretapping reality today\\nOrganization: DSI/...</td>\n",
              "      <td>11</td>\n",
              "      <td>sci.crypt</td>\n",
              "      <td>0</td>\n",
              "      <td>[-0.0038811539, -0.0055605364, 0.009425233, -0...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>278</th>\n",
              "      <td>Re: What would happen if export restrictions ...</td>\n",
              "      <td>11</td>\n",
              "      <td>sci.crypt</td>\n",
              "      <td>0</td>\n",
              "      <td>[-0.005810377, 0.0014717537, 0.0027099252, -0....</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>279</th>\n",
              "      <td>Re: Dorothy Denning opposes Clipper, Capstone...</td>\n",
              "      <td>11</td>\n",
              "      <td>sci.crypt</td>\n",
              "      <td>0</td>\n",
              "      <td>[-0.019840438, -0.013688887, -0.004959918, -0....</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>...</th>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>370</th>\n",
              "      <td>Re: No. Re: Space Marketing would be wonderfu...</td>\n",
              "      <td>14</td>\n",
              "      <td>sci.space</td>\n",
              "      <td>3</td>\n",
              "      <td>[-0.00467501, -0.003431914, 0.024957992, -0.06...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>371</th>\n",
              "      <td>Re: Gamma Ray Bursters.  WHere  are they.\\nAr...</td>\n",
              "      <td>14</td>\n",
              "      <td>sci.space</td>\n",
              "      <td>3</td>\n",
              "      <td>[0.0014332095, 0.0020801027, 0.008766141, -0.0...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>372</th>\n",
              "      <td>Re: Long term Human Missions\\nOrganization: S...</td>\n",
              "      <td>14</td>\n",
              "      <td>sci.space</td>\n",
              "      <td>3</td>\n",
              "      <td>[-0.0030249238, 0.0113083115, 0.027613947, -0....</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>373</th>\n",
              "      <td>Re: Vandalizing the sky.\\nOrganization: Joint...</td>\n",
              "      <td>14</td>\n",
              "      <td>sci.space</td>\n",
              "      <td>3</td>\n",
              "      <td>[-0.0007880609, -0.0064521744, 0.011024299, -0...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>374</th>\n",
              "      <td>Re: DC-X and publicity... is there any ?\\nOrg...</td>\n",
              "      <td>14</td>\n",
              "      <td>sci.space</td>\n",
              "      <td>3</td>\n",
              "      <td>[-0.010754121, 0.002655718, 0.02325094, -0.049...</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>100 rows × 5 columns</p>\n",
              "</div>"
            ],
            "text/plain": [
              "                                                  Text  Label Class Name  \\\n",
              "275   Re: THE CLIPPER CHIP: A TECHNICAL SUMMARY\\nOr...     11  sci.crypt   \n",
              "276   Amiga RIPEM?\\nReply-To: \\nOrganization: Emory...     11  sci.crypt   \n",
              "277   Wiretapping reality today\\nOrganization: DSI/...     11  sci.crypt   \n",
              "278   Re: What would happen if export restrictions ...     11  sci.crypt   \n",
              "279   Re: Dorothy Denning opposes Clipper, Capstone...     11  sci.crypt   \n",
              "..                                                 ...    ...        ...   \n",
              "370   Re: No. Re: Space Marketing would be wonderfu...     14  sci.space   \n",
              "371   Re: Gamma Ray Bursters.  WHere  are they.\\nAr...     14  sci.space   \n",
              "372   Re: Long term Human Missions\\nOrganization: S...     14  sci.space   \n",
              "373   Re: Vandalizing the sky.\\nOrganization: Joint...     14  sci.space   \n",
              "374   Re: DC-X and publicity... is there any ?\\nOrg...     14  sci.space   \n",
              "\n",
              "     Encoded Label                                         Embeddings  \n",
              "275              0  [0.0008749933, -0.009894153, 0.0068213255, -0....  \n",
              "276              0  [-0.022581104, -0.0037767778, -0.0035728822, -...  \n",
              "277              0  [-0.0038811539, -0.0055605364, 0.009425233, -0...  \n",
              "278              0  [-0.005810377, 0.0014717537, 0.0027099252, -0....  \n",
              "279              0  [-0.019840438, -0.013688887, -0.004959918, -0....  \n",
              "..             ...                                                ...  \n",
              "370              3  [-0.00467501, -0.003431914, 0.024957992, -0.06...  \n",
              "371              3  [0.0014332095, 0.0020801027, 0.008766141, -0.0...  \n",
              "372              3  [-0.0030249238, 0.0113083115, 0.027613947, -0....  \n",
              "373              3  [-0.0007880609, -0.0064521744, 0.011024299, -0...  \n",
              "374              3  [-0.010754121, 0.002655718, 0.02325094, -0.049...  \n",
              "\n",
              "[100 rows x 5 columns]"
            ]
          },
          "execution_count": 25,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "df_test = create_embeddings(df_test)\n",
        "df_test"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "QPYEYkIsWt_5"
      },
      "source": [
        "## Build a simple classification model\n",
        "Here you will define a simple model with one hidden layer and a single class probability output. The prediction will correspond to the probability of a piece of text being a particular class of news. When you build your model, Keras will automatically shuffle the data points."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 28,
      "metadata": {
        "id": "3oLGi4w5JsQR"
      },
      "outputs": [],
      "source": [
        "import keras\n",
        "from keras import layers\n",
        "\n",
        "def build_classification_model(input_size: int, num_classes: int) -> keras.Model:\n",
        "  inputs = x = keras.Input(shape=(input_size,))\n",
        "  x = layers.Dense(input_size, activation='relu')(x)\n",
        "  x = layers.Dense(num_classes, activation='softmax')(x)\n",
        "  return keras.Model(inputs=inputs, outputs=x)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 29,
      "metadata": {
        "id": "kORA1Akl5GsG"
      },
      "outputs": [
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "2025-07-10 19:34:32.478648: E external/local_xla/xla/stream_executor/cuda/cuda_platform.cc:51] failed call to cuInit: INTERNAL: CUDA error: Failed call to cuInit: UNKNOWN ERROR (303)\n"
          ]
        },
        {
          "data": {
            "text/html": [
              "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">Model: \"functional\"</span>\n",
              "</pre>\n"
            ],
            "text/plain": [
              "\u001b[1mModel: \"functional\"\u001b[0m\n"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        },
        {
          "data": {
            "text/html": [
              "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
              "┃<span style=\"font-weight: bold\"> Layer (type)                    </span>┃<span style=\"font-weight: bold\"> Output Shape           </span>┃<span style=\"font-weight: bold\">       Param # </span>┃\n",
              "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
              "│ input_layer (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">InputLayer</span>)        │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">3072</span>)           │             <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
              "│ dense (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>)                   │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">3072</span>)           │     <span style=\"color: #00af00; text-decoration-color: #00af00\">9,440,256</span> │\n",
              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
              "│ dense_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>)                 │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">4</span>)              │        <span style=\"color: #00af00; text-decoration-color: #00af00\">12,292</span> │\n",
              "└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
              "</pre>\n"
            ],
            "text/plain": [
              "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
              "┃\u001b[1m \u001b[0m\u001b[1mLayer (type)                   \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape          \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m      Param #\u001b[0m\u001b[1m \u001b[0m┃\n",
              "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
              "│ input_layer (\u001b[38;5;33mInputLayer\u001b[0m)        │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m3072\u001b[0m)           │             \u001b[38;5;34m0\u001b[0m │\n",
              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
              "│ dense (\u001b[38;5;33mDense\u001b[0m)                   │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m3072\u001b[0m)           │     \u001b[38;5;34m9,440,256\u001b[0m │\n",
              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
              "│ dense_1 (\u001b[38;5;33mDense\u001b[0m)                 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m4\u001b[0m)              │        \u001b[38;5;34m12,292\u001b[0m │\n",
              "└─────────────────────────────────┴────────────────────────┴───────────────┘\n"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        },
        {
          "data": {
            "text/html": [
              "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Total params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">9,452,548</span> (36.06 MB)\n",
              "</pre>\n"
            ],
            "text/plain": [
              "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m9,452,548\u001b[0m (36.06 MB)\n"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        },
        {
          "data": {
            "text/html": [
              "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">9,452,548</span> (36.06 MB)\n",
              "</pre>\n"
            ],
            "text/plain": [
              "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m9,452,548\u001b[0m (36.06 MB)\n"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        },
        {
          "data": {
            "text/html": [
              "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Non-trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (0.00 B)\n",
              "</pre>\n"
            ],
            "text/plain": [
              "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "# Derive the embedding size from the first training element.\n",
        "embedding_size = len(df_train['Embeddings'].iloc[0])\n",
        "\n",
        "# Give your model a different name, as you have already used the variable name 'model'\n",
        "classifier = build_classification_model(embedding_size, len(df_train['Class Name'].unique()))\n",
        "classifier.summary()\n",
        "\n",
        "classifier.compile(loss = keras.losses.SparseCategoricalCrossentropy(from_logits=False),\n",
        "                   optimizer = keras.optimizers.Adam(learning_rate=0.001),\n",
        "                   metrics=['accuracy'])"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 30,
      "metadata": {
        "id": "iPYYKnqFvt9x"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "3072"
            ]
          },
          "execution_count": 30,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "embedding_size"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "kbpTGGiMXDxl"
      },
      "source": [
        "## Train the model to classify newsgroups\n",
        "\n",
        "Finally, you can train a simple model. Use a small number of epochs to avoid overfitting. The first epoch takes much longer than the rest, because the embeddings need to be computed only once."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 31,
      "metadata": {
        "id": "bGgvMZGfJ1A4"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Epoch 1/25\n",
            "\u001b[1m13/13\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 54ms/step - accuracy: 0.6282 - loss: 1.1392 - val_accuracy: 0.8800 - val_loss: 0.5001\n",
            "Epoch 2/25\n",
            "\u001b[1m13/13\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 50ms/step - accuracy: 0.9463 - loss: 0.3431 - val_accuracy: 0.9100 - val_loss: 0.2622\n",
            "Epoch 3/25\n",
            "\u001b[1m13/13\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 53ms/step - accuracy: 0.9749 - loss: 0.1185 - val_accuracy: 0.9200 - val_loss: 0.1709\n",
            "Epoch 4/25\n",
            "\u001b[1m13/13\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 54ms/step - accuracy: 0.9909 - loss: 0.0580 - val_accuracy: 0.9200 - val_loss: 0.2019\n",
            "Epoch 5/25\n",
            "\u001b[1m13/13\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 57ms/step - accuracy: 0.9927 - loss: 0.0396 - val_accuracy: 0.9300 - val_loss: 0.1498\n",
            "Epoch 6/25\n",
            "\u001b[1m13/13\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 61ms/step - accuracy: 1.0000 - loss: 0.0220 - val_accuracy: 0.9300 - val_loss: 0.1596\n",
            "Epoch 7/25\n",
            "\u001b[1m13/13\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 65ms/step - accuracy: 1.0000 - loss: 0.0158 - val_accuracy: 0.9400 - val_loss: 0.1307\n",
            "Epoch 8/25\n",
            "\u001b[1m13/13\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 73ms/step - accuracy: 1.0000 - loss: 0.0106 - val_accuracy: 0.9300 - val_loss: 0.1309\n",
            "Epoch 9/25\n",
            "\u001b[1m13/13\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 67ms/step - accuracy: 1.0000 - loss: 0.0089 - val_accuracy: 0.9300 - val_loss: 0.1293\n"
          ]
        }
      ],
      "source": [
        "NUM_EPOCHS = 25\n",
        "BATCH_SIZE = 32\n",
        "\n",
        "# Split the x and y components of the train and validation subsets.\n",
        "y_train = df_train['Encoded Label']\n",
        "x_train = np.stack(df_train['Embeddings'])\n",
        "y_val = df_test['Encoded Label']\n",
        "x_val = np.stack(df_test['Embeddings'])\n",
        "\n",
        "# Train the model for the desired number of epochs.\n",
        "callback = keras.callbacks.EarlyStopping(monitor='accuracy', patience=3)\n",
        "\n",
        "history = classifier.fit(x=x_train,\n",
        "                         y=y_train,\n",
        "                         validation_data=(x_val, y_val),\n",
        "                         callbacks=[callback],\n",
        "                         batch_size=BATCH_SIZE,\n",
        "                         epochs=NUM_EPOCHS,)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "xGBaDHZUPdJO"
      },
      "source": [
        "## Evaluate model performance\n",
        "\n",
        "Use Keras <a href=\"https://www.tensorflow.org/api_docs/python/tf/keras/Model#evaluate\"><code>Model.evaluate</code></a> to get the loss and accuracy on the test dataset."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 32,
      "metadata": {
        "id": "d2kOeiqqQIB8"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 17ms/step - accuracy: 0.9355 - loss: 0.1274\n"
          ]
        },
        {
          "data": {
            "text/plain": [
              "{'accuracy': 0.9300000071525574, 'loss': 0.12925000488758087}"
            ]
          },
          "execution_count": 32,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "classifier.evaluate(x=x_val, y=y_val, return_dict=True)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "UyxMhiLYQXAN"
      },
      "source": [
        "One way to evaluate your model performance is to visualize the classifier performance. Use `plot_history` to see the loss and accuracy trends over the epochs."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 33,
      "metadata": {
        "id": "MaDO9hwbEOW3"
      },
      "outputs": [
        {
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAABlUAAAK9CAYAAAC9yOrfAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAA1PtJREFUeJzs3Xl0lIX1xvFnsu8LZA+BAElAEgRFRRAQFKRiUVERcUFx+9WKVdFaURTEKq1WqlUrVkXUgqAWrS0WBRQVQVEQJRFIwpaQHSGZ7NvM74+ZDMQECDDJm8x8P+fMOZN33nnnjnrGJE/uvSar1WoVAAAAAAAAAAAAjsnD6AIAAAAAAAAAAAC6AkIVAAAAAAAAAACANiBUAQAAAAAAAAAAaANCFQAAAAAAAAAAgDYgVAEAAAAAAAAAAGgDQhUAAAAAAAAAAIA2IFQBAAAAAAAAAABoA0IVAAAAAAAAAACANiBUAQAAAAAAAAAAaANCFQAAAAAAAAAAgDYgVAEAtNnixYtlMpn03XffGV0KAAAAADjV3//+d5lMJg0dOtToUgAAnRihCgAAAAAAANzekiVLlJiYqE2bNik7O9vocgAAnRShCgAAAAAAANzanj17tGHDBi1YsECRkZFasmSJ0SW1qrKy0ugSAMDtEaoAAJzq+++/18UXX6yQkBAFBQXpwgsv1Ndff93snPr6ej322GNKTk6Wn5+funfvrhEjRmj16tWOcwoLCzV9+nT16NFDvr6+io2N1WWXXaa9e/d28DsCAAAA4OqWLFmi8PBwXXLJJbrqqqtaDVVKS0t17733KjExUb6+vurRo4emTZumAwcOOM6pqanR3LlzlZKSIj8/P8XGxuqKK67Qrl27JEnr1q2TyWTSunXrml177969MplMWrx4sePYTTfdpKCgIO3atUsTJkxQcHCwrrvuOknSl19+qcmTJ6tnz57y9fVVQkKC7r33XlVXV7eoe8eOHbr66qsVGRkpf39/9evXTw8//LAk6bPPPpPJZNL777/f4nlLly6VyWTSxo0bT/ifJwC4Mi+jCwAAuI6MjAyNHDlSISEheuCBB+Tt7a2XX35Zo0eP1ueff+6YTTx37lzNnz9ft956q8455xyZzWZ999132rJli8aNGydJuvLKK5WRkaG77rpLiYmJKi4u1urVq5WTk6PExEQD3yUAAAAAV7NkyRJdccUV8vHx0dSpU/XSSy/p22+/1dlnny1Jqqio0MiRI7V9+3bdfPPNOvPMM3XgwAF9+OGH2r9/vyIiItTY2Khf//rXWrt2ra655hrdfffdKi8v1+rVq5Wenq6+ffuecF0NDQ0aP368RowYob/85S8KCAiQJL377ruqqqrSHXfcoe7du2vTpk16/vnntX//fr377ruO5//4448aOXKkvL29dfvttysxMVG7du3Sf/7zHz3xxBMaPXq0EhIStGTJEk2aNKnFP5O+fftq2LBhp/BPFgBcD6EKAMBpZs+erfr6eq1fv159+vSRJE2bNk39+vXTAw88oM8//1yStHLlSk2YMEH/+Mc/Wr1OaWmpNmzYoKefflr333+/4/isWbPa/00AAAAAcCubN2/Wjh079Pzzz0uSRowYoR49emjJkiWOUOXpp59Wenq6VqxY0Sx8mD17tqxWqyTpzTff1Nq1a7VgwQLde++9jnMefPBBxzknqra2VpMnT9b8+fObHf/zn/8sf39/x9e33367kpKS9NBDDyknJ0c9e/aUJN11112yWq3asmWL45gk/elPf5IkmUwmXX/99VqwYIHKysoUGhoqSSopKdEnn3zi6GgBABzG+C8AgFM0Njbqk08+0eWXX+4IVCQpNjZW1157rdavXy+z2SxJCgsLU0ZGhrKyslq9lr+/v3x8fLRu3TodOnSoQ+oHAAAA4J6WLFmi6OhojRkzRpItaJgyZYqWLVumxsZGSdK//vUvDRo0qEU3R9P5TedERETorrvuOuo5J+OOO+5ocezIQKWyslIHDhzQ8OHDZbVa9f3330uyBSNffPGFbr755maByi/rmTZtmmpra/Xee+85ji1fvlwNDQ26/vrrT7puAHBVhCoAAKcoKSlRVVWV+vXr1+Kx0047TRaLRbm5uZKkefPmqbS0VCkpKRo4cKB+//vf68cff3Sc7+vrqz//+c/63//+p+joaI0aNUpPPfWUCgsLO+z9AAAAAHB9jY2NWrZsmcaMGaM9e/YoOztb2dnZGjp0qIqKirR27VpJ0q5du5SWlnbMa+3atUv9+vWTl5fzBsN4eXmpR48eLY7n5OTopptuUrdu3RQUFKTIyEidf/75kqSysjJJ0u7duyXpuHX3799fZ599drM9MkuWLNG5556rpKQkZ70VAHAZhCoAgA43atQo7dq1S4sWLVJaWppe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vsH5+Ph45ebmHvc+ubm5Tbp+zpw5ioyMrDuSk5NbpngAAAAAAAAAANCpWBqqtIXZs2erqKio7tizZ4/VJQEAAAAAAAAAAD9k6aD62NhY2e125eXlNTifl5enbt26Hfc+3bp1a9L1TqdTTqezZQoGAAAAAAAAAACdlqWdKoGBgRo5cqQyMjLqzrndbmVkZGjcuHHHvc+4ceMaXC9JS5cuPeH1AAAAANCePfPMM+rZs6eCgoI0duxYrVy58oTXnn322TIM45jj4osvrrtm2rRpx3z9wgsvbIuXAgAAAHR4lnaqSNLMmTM1depUjRo1SmPGjNHcuXNVVlam6dOnS5JuuOEGJSYmas6cOZKkO++8U2eddZb+9re/6eKLL9aiRYu0evVqvfDCC1a+DAAAAABosjfeeEMzZ87Uc889p7Fjx2ru3LmaNGmStm/frri4uGOuf+edd1RZWVn3+f79+zV06FBdccUVDa678MILNX/+/LrP6d4HAAAAWoblocpVV12lgoIC3X///crNzdWwYcP08ccf1w2j3717t2y2+oaa8ePHa+HChbr33nt1zz33KDU1VYsXL1Z6erpVLwEAAAAAmuXJJ5/Ur371q7o/Knvuuef073//Wy+//LJmzZp1zPUxMTENPl+0aJFCQkKOCVWcTucJt0gGAAAA0HyGx+PxWF1EWyouLlZkZKSKiooUERFhdTkAAABAq+Nn4PapsrJSISEhevvttzVlypS681OnTtWhQ4f03nvvnfIxBg8erHHjxjXo3J82bZoWL16swMBARUdH69xzz9UjjzyiLl26nPBxXC6XXC5X3efFxcVKTk7mewYAAACdQlPWTJbOVAEAAACAzqqwsFA1NTV1Xfq14uPjlZube8r7r1y5Ups3b9ZNN93U4PyFF16of/zjH8rIyNATTzyhZcuWafLkyaqpqTnhY82ZM0eRkZF1R3JycvNeFAAAANDBWb79FwAAAACg6V566SUNHjxYY8aMaXD+6quvrrs9ePBgDRkyRH369NEXX3yh884777iPNXv2bM2cObPu89pOFQAAAAAN0akCAAAAABaIjY2V3W5XXl5eg/N5eXmnnIdSVlamRYsW6Ze//OUpn6d3796KjY3Vjh07TniN0+lUREREgwMAAADAsQhVAAAAAMACgYGBGjlypDIyMurOud1uZWRkaNy4cSe971tvvSWX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rV27VqtWrbK6FL8zduxYvfLKK+rXr59ycnL00EMP6YwzztDmzZsVHh5udXnt3q5duzRv3jzNnDlT99xzj1atWqXf/OY3CgwM1NSpU60uz68sXrxYhw4d0rRp06wuxW/MmjVLxcXF6t+/v+x2u2pqavToo4/q2muvtbo0oF1izYT2hHVT87Buaj7WTL5h3eQb1k0th3VT0/njuolQBehkZsyYoc2bN7O3aBP169dP69evV1FRkd5++21NnTpVy5YtY4HQCHv27NGdd96ppUuXKigoyOpy/M6Rf5kxZMgQjR07Vj169NCbb77JNgqN4Ha7NWrUKD322GOSpOHDh2vz5s167rnnWBw00UsvvaTJkyere/fuVpfiN95880299tprWrhwoQYNGqT169frrrvuUvfu3fn+A4B2jnVT87Buah7WTL5j3eQb1k0th3VT0/njuolQpY3ExsbKbrcrLy+vwfm8vDx169bNoqrQ2dx+++368MMP9eWXXyopKcnqcvxKYGCg+vbtK0kaOXKkVq1apb///e96/vnnLa6s/VuzZo3y8/M1YsSIunM1NTX68ssv9fTTT8vlcslut1tYoX+JiopSWlqaduzYYXUpfiEhIeGYRfyAAQP0r3/9y6KK/NOPP/6ozz77TO+8847VpfiVu+++W7NmzdLVV18tSRo8eLB+/PFHzZkzp90uDgArsWZCe8G6qflYNzUPa6aWx7qpaVg3tQzWTc3jj+smZqq0kcDAQI0cOVIZGRl159xutzIyMthfFK3O4/Ho9ttv17vvvqv//Oc/6tWrl9Ul+T232y2Xy2V1GX7hvPPO06ZNm7R+/fq6Y9SoUbr22mu1fv16FgdNVFpaqp07dyohIcHqUvzChAkTtH379gbnMjMz1aNHD4sq8k/z589XXFycLr74YqtL8Svl5eWy2Rr+uG232+V2uy2qCGjfWDPBaqybWh7rpsZhzdTyWDc1DeumlsG6qXn8cd1Ep0obmjlzpqZOnapRo0ZpzJgxmjt3rsrKyjR9+nSrS2v3SktLG/x1wffff6/169crJiZGKSkpFlbmH2bMmKGFCxfqvffeU3h4uHJzcyVJkZGRCg4Otri69m/27NmaPHmyUlJSVFJSooULF+qLL77QJ598YnVpfiE8PPyYfahDQ0PVpUsX9qduhN///ve65JJL1KNHD+3bt08PPPCA7Ha7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",
            "text/plain": [
              "<Figure size 2000x800 with 2 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "import matplotlib.pyplot as plt\n",
        "\n",
        "def plot_history(history):\n",
        "  \"\"\"\n",
        "    Plotting training and validation learning curves.\n",
        "\n",
        "    Args:\n",
        "      history: model history with all the metric measures\n",
        "  \"\"\"\n",
        "  fig, (ax1, ax2) = plt.subplots(1,2)\n",
        "  fig.set_size_inches(20, 8)\n",
        "\n",
        "  # Plot loss\n",
        "  ax1.set_title('Loss')\n",
        "  ax1.plot(history.history['loss'], label = 'train')\n",
        "  ax1.plot(history.history['val_loss'], label = 'test')\n",
        "  ax1.set_ylabel('Loss')\n",
        "\n",
        "  ax1.set_xlabel('Epoch')\n",
        "  ax1.legend(['Train', 'Validation'])\n",
        "\n",
        "  # Plot accuracy\n",
        "  ax2.set_title('Accuracy')\n",
        "  ax2.plot(history.history['accuracy'],  label = 'train')\n",
        "  ax2.plot(history.history['val_accuracy'], label = 'test')\n",
        "  ax2.set_ylabel('Accuracy')\n",
        "  ax2.set_xlabel('Epoch')\n",
        "  ax2.legend(['Train', 'Validation'])\n",
        "\n",
        "  plt.show()\n",
        "\n",
        "plot_history(history)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "kOgva0pbP4FS"
      },
      "source": [
        "Another way to view model performance, beyond just measuring loss and accuracy is to use a confusion matrix. The confusion matrix allows you to assess the performance of the classification model beyond accuracy. You can see what misclassified points get classified as. In order to build the confusion matrix for this multi-class classification problem, get the actual values in the test set and the predicted values.\n",
        "\n",
        "Start by generating the predicted class for each example in the validation set using [`Model.predict()`](https://www.tensorflow.org/api_docs/python/tf/keras/Model#predict)."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 34,
      "metadata": {
        "id": "PRUx5ao9QRcO"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "\u001b[1m4/4\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 20ms/step\n"
          ]
        }
      ],
      "source": [
        "y_hat = classifier.predict(x=x_val)\n",
        "y_hat = np.argmax(y_hat, axis=1)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 35,
      "metadata": {
        "id": "CVidbr0OT5tL"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "{'sci.crypt': 0, 'sci.electronics': 1, 'sci.med': 2, 'sci.space': 3}"
            ]
          },
          "execution_count": 35,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "labels_dict = dict(zip(df_test['Class Name'], df_test['Encoded Label']))\n",
        "labels_dict"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 24,
      "metadata": {
        "id": "3ae76701e178"
      },
      "outputs": [
        {
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAksAAAIbCAYAAAD7M9r1AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAdwRJREFUeJzt3XdYFFfbBvB76SAdREQRROwi9oYlBgPBaKJoEomJ2GPB3mMs2DAmlqgRYy/RVxM1xhhjw15CEntBFMSOiCJdQNjz/cHHxpUiuAMDy/27rrmSPTNz5tlh1n32nDNnFEIIASIiIiLKk47cARARERGVZkyWiIiIiArAZImIiIioAEyWiIiIiArAZImIiIioAEyWiIiIiArAZImIiIioAEyWiIiIiArAZImIiIioAEyWqMy4desWvLy8YGFhAYVCgd27d0ta/507d6BQKLBhwwZJ69UGzs7O6Nu3r2T1xcTEoGfPnrCxsYFCocCSJUskq5tIExs2bIBCocCdO3fkDoVKESZLVCSRkZH48ssv4eLiAiMjI5ibm8PDwwPff/89Xrx4UazH9vf3x5UrVzB37lxs3rwZzZo1K9bjaaPr169j5syZsn8RjBkzBgcOHMCUKVOwefNmvP/++7LGQ8Vr3759mDlzZrEeIzU1FTNnzsSxY8eK9TgF2bp1a6lJ/EvD+dAqgqiQ9u7dK4yNjYWlpaUYOXKkWLVqlVi+fLno1auX0NfXF4MGDSq2Y6empgoAYurUqcV2DKVSKV68eCEyMzOL7Rhy++WXXwQAcfTo0SLtl5aWJjIyMiSLo1KlSqJ3796S1Uel2/Dhw0Vxf93ExsYKAGLGjBka1bN+/XoBQERFRRV53w8++EA4OTlpdHypSHU+KJuenIkalR1RUVHo1asXnJyccOTIEVSuXFm1bvjw4YiIiMAff/xRbMePjY0FAFhaWhbbMRQKBYyMjIqt/rJGCIG0tDQYGxvD0NBQ0rqfPHki6d8yLS0NBgYG0NEp343lKSkpqFChgtxhEGkfubM1KhuGDBkiAIjTp08XavuXL1+KWbNmCRcXF2FgYCCcnJzElClTRFpamtp2Tk5O4oMPPhAnT54UzZs3F4aGhqJ69epi48aNqm1mzJghAKgtOb/e/P398/wll7PPqw4ePCg8PDyEhYWFqFChgqhVq5aYMmWKan1UVJQAINavX6+2X0hIiGjbtq0wMTERFhYW4sMPPxTXr1/P83i3bt0S/v7+wsLCQpibm4u+ffuKlJSUN56vDh06iPr164tLly6J9u3bC2NjY1GjRg3xyy+/CCGEOHbsmGjRooUwMjIStWrVEocOHVLb/86dO2Lo0KGiVq1awsjISFhbW4uePXuq/TrO+cX8+pLTypTzt9i/f79o2rSpMDQ0FIsXL1at8/f3F0Jkt8C98847wtbWVsTExKjqT09PFw0aNBAuLi4iOTk5z/eZXww5IiMjRc+ePYWVlZUwNjYWLVu2FHv37lWr4+jRowKA+N///iemTp0qHBwchEKhEM+fP8/zmDl/12+//Vb8+OOPqmuyWbNm4u+//861fVhYmOjRo4ewsrIShoaGomnTpuK3335TrX/+/LnQ0dER33//vaosNjZWKBQKYW1tLZRKpap8yJAholKlSqrXN2/eFL6+vqJSpUrC0NBQVKlSRXz66aciPj5etU1qaqoYMWKEsLGxEaampqJr167iwYMHuVoJcq65a9euCT8/P2FpaSkaNWokhCj85+/1OnO8+vcW4r+/2/Hjx8XgwYOFtbW1MDMzE1988YWIi4vL87zn8Pf3L/BvnpWVJRYvXizq1asnDA0NhZ2dnRg8eHCuev/55x/h5eUlbGxshJGRkXB2dhb9+vUTQvz3N359eVOrytWrV0XHjh2FkZGRqFKlipg9e7ZYu3Ztrpal3bt3i86dO4vKlSsLAwMD4eLiImbNmqXWCt2hQ4d8/51KT08X06ZNE02aNBHm5ubCxMREtG3bVhw5ciRXTP/73/9EkyZNhKmpqTAzMxMNGjQQS5YsUdvm+fPnYtSoUaJq1arCwMBA1KhRQ8yfP19kZWVpdD4of2xZokL5/fff4eLigjZt2hRq+4EDB2Ljxo3o2bMnxo0bh9DQUAQFBSEsLAy//vqr2rYRERHo2bMnBgwYAH9/f6xbtw59+/ZF06ZNUb9+ffj6+sLS0hJjxoyBn58fOnfuDFNT0yLFf+3aNXTp0gUNGzbErFmzYGhoiIiICJw+fbrA/Q4fPgwfHx+4uLhg5syZePHiBZYtWwYPDw+cP38ezs7Oatt/8sknqF69OoKCgnD+/HmsWbMGdnZ2+Oabb94Y4/Pnz9GlSxf06tULH3/8MYKDg9GrVy9s2bIFo0ePxpAhQ/DZZ5/h22+/Rc+ePXH//n2YmZkBAP755x+cOXMGvXr1QtWqVXHnzh0EBwfjnXfewfXr12FiYoL27dtj5MiRWLp0Kb766ivUrVsXAFT/BYDw8HD4+fnhyy+/xKBBg1C7du1ccSoUCqxbtw4NGzbEkCFDsGvXLgDAjBkzcO3aNRw7dizf1o327dtj8+bN+OKLL/Dee++hT58+qnUxMTFo06YNUlNTMXLkSNjY2GDjxo348MMPsWPHDnTv3l2trtmzZ8PAwADjx49Heno6DAwMCjy/W7duRVJSEr788ksoFAosWLAAvr6+uH37NvT19QFkXyceHh6oUqUKJk+ejAoVKuDnn39Gt27dsHPnTnTv3h2WlpZo0KABTpw4gZEjRwIATp06BYVCgbi4OFy/fh3169cHAJw8eRLt2rUDAGRkZMDb2xvp6ekYMWIE7O3t8fDhQ+zduxfx8fGwsLAAAPTt2xc///wzvvjiC7Rq1QrHjx/HBx98kO/7+vjjj1GzZk3MmzcPQggARfv8FUVAQAAsLS0xc+ZMhIeHIzg4GHfv3sWxY8egUCjy3OfLL7/Eo0ePcOjQIWzevDnP9Rs2bEC/fv0wcuRIREVFYfny5bhw4QJOnz4NfX19PHnyBF5eXqhYsSImT54MS0tL3LlzR3XtVaxYEcHBwRg6dCi6d+8OX19fAEDDhg3zfS+PHz9Gx44dkZmZqfpbr1q1CsbGxrm23bBhA0xNTTF27FiYmpriyJEjmD59OhITE/Htt98CAKZOnYqEhAQ8ePAAixcvBgDVv1OJiYlYs2YN/Pz8MGjQICQlJWHt2rXw9vbG33//jUaNGgEADh06BD8/P3h6eqr+zQgLC8Pp06cxatQoANljkTp06ICHDx/iyy+/RLVq1XDmzBlMmTIF0dHRWLJkyVudD3oDubM1Kv0SEhIEAPHRRx8VavuLFy8KAGLgwIFq5ePHjxcA1H5NOTk5CQDixIkTqrInT54IQ0NDMW7cOFXZq60Drypsy9LixYsFABEbG5tv3Hm1LDVq1EjY2dmJZ8+eqcouXbokdHR0RJ8+fXIdr3///mp1du/eXdjY2OR7zBw5v0q3bt2qKrtx44YAIHR0dMRff/2lKj9w4ECuOFNTU3PVefbsWQFAbNq0SVVW0JilnL/F/v3781z3akuDEEL8+OOPAoD46aefxF9//SV0dXXF6NGj3/hehchu0Rg+fLha2ejRowUAcfLkSVVZUlKSqF69unB2dlb9as5pWXJxccnzfb8u5+9qY2Oj1lrx22+/CQDi999/V5V5enoKNzc3tRYYpVIp2rRpI2rWrKkqGz58uFqL0dixY0X79u2FnZ2dCA4OFkII8ezZM6FQKFQtUBcuXBAAVK2FeTl37pwAkOs89u3bN9+WJT8/P7Vti/L5e73OHPm1LDVt2lRt7NqCBQsEALWWt7zkN2bp5MmTAoDYsmWLWvn+/fvVyn/99VcBQPzzzz/5HqOoY3RyrrfQ0FBV2ZMnT4SFhUWulqW8rrMvv/xSmJiYqF0r+Y1ZyszMFOnp6Wplz58/F5UqVVL7N2PUqFHC3Ny8wHGTs2fPFhUqVBA3b95UK588ebLQ1dUV9+7dE0JwzJLUyncHPxVKYmIiAKhaMd5k3759AICxY8eqlY8bNw4Aco1tqlevnurXN5D9K7F27dq4ffv2W8f8upzxMb/99huUSmWh9omOjsbFixfRt29fWFtbq8obNmyI9957T/U+XzVkyBC11+3atcOzZ89U57Agpqam6NWrl+p17dq1YWlpibp166Jly5aq8pz/f/X8vPpr+OXLl3j27BlcXV1haWmJ8+fPF+LdZqtevTq8vb0Lte3gwYPh7e2NESNG4IsvvkCNGjUwb968Qh/rdfv27UOLFi3Qtm1bVZmpqSkGDx6MO3fu4Pr162rb+/v759kKkJ9PP/0UVlZWqtc511zOeYyLi8ORI0fwySefICkpCU+fPsXTp0/x7NkzeHt749atW3j48KFq35iYGISHhwPIbkFq37492rVrh5MnTwLIbm0SQqiOk9NydODAAaSmpuYZ4/79+wEAw4YNUysfMWJEvu/r9WuuqJ+/ohg8eLCqFQ4Ahg4dCj09vTw/C4Xxyy+/wMLCAu+9957qfD99+hRNmzaFqakpjh49CuC/z+/evXvx8uXLt47/Vfv27UOrVq3QokULVVnFihXRu3fvXNu+ep3lXBvt2rVDamoqbty48cZj6erqqlo+lUol4uLikJmZiWbNmql9Pi0tLZGSkoJDhw7lW9cvv/yCdu3awcrKSu2cderUCVlZWThx4kSh3j8VDZMleiNzc3MA2f9IFMbdu3eho6MDV1dXtXJ7e3tYWlri7t27auXVqlXLVYeVlRWeP3/+lhHn9umnn8LDwwMDBw5EpUqV0KtXL/z8888FJk45cebVFVW3bl08ffoUKSkpauWvv5ecL+fCvJeqVavm6sqwsLCAo6NjrrLX63zx4gWmT58OR0dHGBoawtbWFhUrVkR8fDwSEhLeeOwc1atXL/S2ALB27Vqkpqbi1q1b2LBhQ5GSl9fdvXs333Ods16TWN/0t4mIiIAQAtOmTUPFihXVlhkzZgDIHpgO/JdonTx5EikpKbhw4QLatWuH9u3bq5KlkydPwtzcHO7u7qp4x44dizVr1sDW1hbe3t744Ycf1P4+OZ+d19/b65+lgs5DUT9/RVGzZk2116ampqhcufJbT0Vx69YtJCQkwM7OLtc5T05OVp3vDh06oEePHggMDIStrS0++ugjrF+/Hunp6W/9Xu7evZvr/QB5f96vXbuG7t27w8LCAubm5qhYsSI+//xzACj052vjxo1o2LAhjIyMYGNjg4oVK+KPP/5Q23/YsGGoVasWfHx8ULVqVfTv31+VQOe4desW9u/fn+t8derUCcB/1yhJi2OW6I3Mzc3h4OCAq1evFmm//MYwvE5XVzfPcvH/4y/e5hhZWVlqr42NjXHixAkcPXoUf/zxB/bv34/t27fj3XffxcGDB/ONoag0eS/57VuYOkeMGIH169dj9OjRaN26tWrizl69ehW6JQ1AkZOdY8eOqb6wrly5gtatWxdpf00UNdY3ncec8zR+/Ph8W9dyEhAHBwdUr14dJ06cgLOzM4QQaN26NSpWrIhRo0bh7t27OHnyJNq0aaN2h97ChQvRt29f/Pbbbzh48CBGjhyJoKAg/PXXX6hatWqR3k+O/M5DYT9/eXn981NclEol7OzssGXLljzXV6xYEUD2e9mxYwf++usv/P777zhw4AD69++PhQsX4q+//iryGMaiiI+PR4cOHWBubo5Zs2ahRo0aMDIywvnz5zFp0qRCfb5++ukn9O3bF926dcOECRNgZ2cHXV1dBAUFITIyUrWdnZ0dLl68iAMHDuDPP//En3/+ifXr16NPnz7YuHEjgOxz9t5772HixIl5HqtWrVrSvHFSw2SJCqVLly5YtWoVzp49+8YvRCcnJyiVSty6dUtt8HBMTAzi4+Ph5OQkWVxWVlaIj4/PVZ7Xr2cdHR14enrC09MTixYtwrx58zB16lQcPXpU9avs9fcBQNXV8qobN27A1ta21NymvWPHDvj7+2PhwoWqsrS0tFznRpMv0NdFR0djxIgR8PLyUg209vb2fuu/r5OTU77nOmd9cXJxcQEA6Ovr53k9vK5du3Y4ceIEqlevjkaNGsHMzAzu7u6wsLDA/v37cf78eQQGBubaz83NDW5ubvj6669x5swZeHh4YOXKlZgzZ47qsxMVFaXW6hEREVHo91GUz19en5+MjAxER0fnWfetW7fQsWNH1evk5GRER0ejc+fOBcaU33VXo0YNHD58GB4eHoVKflu1aoVWrVph7ty52Lp1K3r37o1t27Zh4MCBRb62nZyccOvWrVzlr1+Dx44dw7Nnz7Br1y60b99eVR4VFZVr3/xi2LFjB1xcXLBr1y61bXJaLF9lYGCArl27omvXrlAqlRg2bBh+/PFHTJs2Da6urqhRowaSk5PfeI1K+VkndsNRIU2cOBEVKlTAwIEDERMTk2t9ZGQkvv/+ewBQ/cP5+ky2ixYtAoAC7+wpqho1aiAhIQGXL19WlUVHR+e64ycuLi7Xvjl3oOTXlF+5cmU0atQIGzduVPtCuXr1Kg4ePPjGL4iSpKurm6v1atmyZblaCHKSu7wSzKIaNGgQlEol1q5di1WrVkFPTw8DBgwoVCtaXjp37oy///4bZ8+eVZWlpKRg1apVcHZ2Rr169TSOuSB2dnZ455138OOPP+aZLOTM9ZWjXbt2uHPnDrZv367qltPR0UGbNm2waNEivHz5Um0sXmJiIjIzM9XqcHNzg46OjuoazGnRWrFihdp2y5YtK/T7KMrnr0aNGrnGuKxatSrflqVVq1apjRkKDg5GZmYmfHx8Cowpv+vuk08+QVZWFmbPnp1rn8zMTNX2z58/z3Vdvf75NTExyfMY+encuTP++usv/P3336qy2NjYXK1cOS2Srx4/IyMj198IyH6feXXL5VVHaGio2rUOAM+ePVN7raOjo7qDLed9fvLJJzh79iwOHDiQ6zjx8fGqa6yo54MKxpYlKpQaNWpg69at+PTTT1G3bl306dMHDRo0QEZGBs6cOYNffvlF9ewwd3d3+Pv7Y9WqVaom7L///hsbN25Et27d1H6ZaqpXr16YNGkSunfvjpEjRyI1NRXBwcGoVauW2sDJWbNm4cSJE/jggw/g5OSEJ0+eYMWKFahataragOLXffvtt/Dx8UHr1q0xYMAA1dQBFhYWxf74hqLo0qULNm/eDAsLC9SrVw9nz57F4cOHYWNjo7Zdo0aNoKuri2+++QYJCQkwNDTEu+++Czs7uyIdb/369fjjjz+wYcMGVffRsmXL8PnnnyM4ODjXAOXCmDx5Mv73v//Bx8cHI0eOhLW1NTZu3IioqCjs3LmzRCac/OGHH9C2bVu4ublh0KBBcHFxQUxMDM6ePYsHDx7g0qVLqm1zEqHw8HC1ge3t27fHn3/+CUNDQzRv3lxVfuTIEQQEBODjjz9GrVq1kJmZic2bN0NXVxc9evQAADRt2hQ9evTAkiVL8OzZM9XUATdv3gRQuNaConz+Bg4ciCFDhqBHjx547733cOnSJRw4cAC2trZ51p2RkQFPT0988sknCA8Px4oVK9C2bVt8+OGHBcbUtGlTAMDIkSPh7e0NXV1d9OrVCx06dMCXX36JoKAgXLx4EV5eXtDX18etW7fwyy+/4Pvvv0fPnj2xceNGrFixAt27d0eNGjWQlJSE1atXw9zcXJUcGhsbo169eti+fTtq1aoFa2trNGjQAA0aNMgzpokTJ6oetTNq1CjV1AFOTk5qP77atGkDKysr+Pv7Y+TIkVAoFNi8eXOePwqaNm2K7du3Y+zYsWjevDlMTU3RtWtXdOnSBbt27UL37t3xwQcfICoqCitXrkS9evWQnJys9veIi4vDu+++i6pVq+Lu3btYtmwZGjVqpGolnDBhAvbs2YMuXbqoplhJSUnBlStXsGPHDty5cwe2trZFPh/0BrLcg0dl1s2bN8WgQYOEs7OzMDAwEGZmZsLDw0MsW7ZM7Rbaly9fisDAQFG9enWhr68vHB0dC5yU8nUdOnQQHTp0UL3Ob+oAIbInm2zQoIEwMDAQtWvXFj/99FOuqQNCQkLERx99JBwcHISBgYFwcHAQfn5+arff5jcp5eHDh4WHh4cwNjYW5ubmomvXrvlOSvn61ASFfXRCzqSUr8vv/OC1W++fP38u+vXrJ2xtbYWpqanw9vYWN27cyPOW/9WrVwsXFxehq6ub56SUeXm1nvv37wsLCwvRtWvXXNt1795dVKhQQdy+fbvA9/t6/DlyJqW0tLQURkZGokWLFvlOSlnQLfivKujaQR63VkdGRoo+ffoIe3t7oa+vL6pUqSK6dOkiduzYkWt/Ozs7AUBtcs5Tp04JAKJdu3Zq296+fVv0799f1KhRQzVxaMeOHcXhw4fVtktJSRHDhw8X1tbWwtTUVHTr1k2Eh4cLAGL+/Pmq7fK75oQo/OcvKytLTJo0Sdja2goTExPh7e0tIiIi3jgppZWVlTA1NRW9e/dWm1YjP5mZmWLEiBGiYsWKQqFQ5JpGYNWqVaJp06bC2NhYmJmZCTc3NzFx4kTx6NEjIYQQ58+fF35+fqJatWqqiSu7dOki/v33X7V6zpw5I5o2bSoMDAwKddv85cuXRYcOHd44KeXp06dFq1athLGxsXBwcBATJ05UTeHx6jQcycnJ4rPPPhOWlpZqk1IqlUoxb9484eTkJAwNDUXjxo3F3r17c019smPHDuHl5SXs7OyEgYGBqFatmvjyyy9FdHS0WtxJSUliypQpwtXVVRgYGAhbW1vRpk0b8d1336lN7VDU80H5Uwjxlm3mRERUIi5evIjGjRvjp59+yvPW9uKWM2nkP//8wwdYU7nEMUtERKXIixcvcpUtWbIEOjo6agOMiajkcMwSEVEpsmDBApw7dw4dO3aEnp6e6hbywYMH55pzi4hKBpMlIqJSpE2bNjh06BBmz56N5ORkVKtWDTNnzsTUqVPlDo2o3OKYJSIiIqICcMwSERERUQGYLBEREREVgGOW6I2USiUePXoEMzMzTqFPRFTGCCGQlJQEBweHYp3cNS0tDRkZGZLUZWBgACMjI0nqkgKTJXqjR48e8S4cIqIy7v79+2/9wOY3SUtLQ3UnUzx+Is1DmO3t7REVFVVqEiYmS/RGZmZmAIC7551hbsqe25LQvZab3CEQFSu9alXkDqHcyFRm4NiDNap/y4tDRkYGHj/JQtQ5J5ibafY9kZikRPWmd5GRkcFkicqOnK43c1MdjT8EVDh6Cn25QyAqVno6hnKHUO6UxDAKczPt/J5gskRERESSyBJKZGk4IVGWUEoTjISYLBEREZEklBBQQrNsSdP9i4P2tZURERERSYgtS0RERCQJJZTQtBNN8xqkx2SJiIiIJJElBLI0fIqapvsXByZLREREJAmOWSIiIiIqh9iyRERERJJQQiBLC1uWmCwRERGRJNgNR0RERFQOsWWJiIiIJMG74YiIiIgKoPz/RdM6Sht2wxEREREVgC1LREREJIksCe6G03T/4sBkiYiIiCSRJbIXTesobdgNR0RERFQAtiwRERGRJLR1gDeTJSIiIpKEEgpkQaFxHaUNkyUiIiKShFJkL5rWUdpwzBIRERFRAdiyRERERJLIkqAbTtP9iwOTJSIiIpKEtiZL7IYjIiIiKgBbloiIiEgSSqGAUmh4N5yG+xcHJktEREQkCXbDEREREZVDbFkiIiIiSWRBB1katsNkSRSLlJgsERERkSSEBGOWRCkcs8RuOCIiIqICsGWJiIiIJKGtA7yZLBEREZEksoQOsoSGY5ZK4bPhmCwRERGRJJRQQKnhCB8lSl+2xDFLRERERAVgyxIRERFJgmOWiIiIiAogzZgldsMRERERlSlsWSIiIiJJZA/w1vBBuuyGIyIiIm2llOBxJ6XxbjgmS8VAoVDg119/Rbdu3eQORettW2aH0/sscT/CEAZGStRrlooBUx/B0TVdtc33E6viwkkzPIvRh7GJEnWbpWDA1EeoVjO9gJqpqLr2fYqeQ5/AumImbl83xoqvqyD8ooncYWktnu+S83GfCLTpEI2qTsnISNdF2BUrrF9RFw/vmcodGpUQjlkqBtHR0fDx8ZE7jFyOHTsGhUKB+Ph4uUORzOWzpuja9ymW7L2FoG2RyMoEvvKrgbTU/y7tmg1fYNzie1h9/Abmbo0ERPY2WaXxaY1lVIcPn2PwjEfYssgew71r4fZ1I8zdehsWNi/lDk0r8XyXLLfGz/DHTmeMG9QWX49qBT09gTlLQmFolCl3aKVOzgBvTZfSpvRFpAXs7e1haGgoWX0vX/IfwPzM23obXp/Gwbl2GmrUT8O4Jffw5KEBbl02Vm3T+fNncGuVAnvHDNRs+AL+k6IR+8gAMfcNZIxcu/gOfor9W61xcLs17t0ywtJJVZH+QgFvvzi5Q9NKPN8la/qYlji8zxH3oswQFWGORXPcYVf5BVzrJMgdWqmjhI4kS2lT+iIqRXbs2AE3NzcYGxvDxsYGnTp1QkpKCgBg3bp1qF+/PgwNDVG5cmUEBASo9lMoFNi9e3e+9SqVSixYsACurq4wNDREtWrVMHfuXADAnTt3oFAosH37dnTo0AFGRkZYtWoVzM3NsWPHDrV6du/ejQoVKiApKUm137Zt29CmTRsYGRmhQYMGOH78uKrejh07AgCsrKygUCjQt29fCc9W6ZCSqAsAMLPMu9koLVUHB7dbw75aOio6MAmVgp6+EjUbpuL8STNVmRAKXDhphnpNU2WMTDvxfMuvgml2i1Jyor7MkVBQUBCaN28OMzMz2NnZoVu3bggPD1fbJi0tDcOHD4eNjQ1MTU3Ro0cPxMTEFOk4TJbyER0dDT8/P/Tv3x9hYWE4duwYfH19IYRAcHAwhg8fjsGDB+PKlSvYs2cPXF1dC133lClTMH/+fEybNg3Xr1/H1q1bUalSJbVtJk+ejFGjRiEsLAy+vr7o1asX1q9fr7bN+vXr0bNnT5iZ/feP5oQJEzBu3DhcuHABrVu3RteuXfHs2TM4Ojpi586dAIDw8HBER0fj+++/zzO+9PR0JCYmqi1lgVIJrJxRBfWbJ8O5Tpraut832OAjVzd85NoQ/xwxR9C2SOgblL5BhGWRuXUWdPWA+Fj1IZDPn+rBqiK7KaTG8y0vhUJg8OhruHbJCndvm8sdTqmTJRSSLIV1/PhxDB8+HH/99RcOHTqEly9fwsvLS9WwAQBjxozB77//jl9++QXHjx/Ho0eP4OvrW6T3xQHe+YiOjkZmZiZ8fX3h5OQEAHBzcwMAzJkzB+PGjcOoUaNU2zdv3rxQ9SYlJeH777/H8uXL4e/vDwCoUaMG2rZtq7bd6NGj1f6YAwcORJs2bRAdHY3KlSvjyZMn2LdvHw4fPqy2X0BAAHr06AEACA4Oxv79+7F27VpMnDgR1tbWAAA7OztYWlrmG2NQUBACAwML9X5Kk+VfVcXdG8ZYuPtWrnXv+j5Hk/ZJiHuijx3Bdpj7pTMW/3YLBkZMmIio8IaOvwonlyRM+LKN3KGUSlkS3A2XVYS74fbv36/2esOGDbCzs8O5c+fQvn17JCQkYO3atdi6dSveffddANkNDXXr1sVff/2FVq1aFeo4bFnKh7u7Ozw9PeHm5oaPP/4Yq1evxvPnz/HkyRM8evQInp6eb1VvWFgY0tPT37h/s2bN1F63aNEC9evXx8aNGwEAP/30E5ycnNC+fXu17Vq3bq36fz09PTRr1gxhYWFFinHKlClISEhQLffv3y/S/nJY/lUVhB4yx4IdEXl2r1UwV6KKSwbcWqXg69V3cD/CEKf/tJAhUu2TGKeLrEzA8rVWDSvbTDyP5e8xqfF8y2fIuCto4RGDKcNb41ms8Zt3KIeUQkeSBUCuHo709DffwZyQkD2OLKdx4Ny5c3j58iU6deqk2qZOnTqoVq0azp49W+j3xWQpH7q6ujh06BD+/PNP1KtXD8uWLUPt2rWL3M/5OmPjwn3AKlSokKts4MCB2LBhA4DszLhfv35QKKSfvMvQ0BDm5uZqS2klRHaidGa/BRb8EgH7ahmF2gdCgZcZvPylkPlSB7cum6Bx2yRVmUIh0KhtMq6f463sUuP5loPAkHFX0LrDY3wV0Aox0TzPJcHR0REWFhaqJSgoqMDtlUolRo8eDQ8PDzRo0AAA8PjxYxgYGOTqTalUqRIeP35c6Fj4bVEAhUIBDw8PBAYG4sKFCzAwMMChQ4fg7OyMkJCQt6qzZs2aMDY2fqv9P//8c9y9exdLly7F9evXVd14r/rrr79U/5+ZmYlz586hbt26AAADg+y7v7K06J755V9VxZFd1pj8w10YmyoR90QPcU/0kP4iO4mMvmuAbcvscOuyMZ480Me1f0wwd7AzDIyVaOFZNsZilQW7VtnC57M4dPo4Do6uaRgx/wGMTJQ4uM1a7tC0Es93yRo2/io6ej/EtzOa4EWqHqys02BlnQYDQ+35t1QqOd1wmi4AcP/+fbVejilTphR47OHDh+Pq1avYtm2b5O+Lbbb5CA0NRUhICLy8vGBnZ4fQ0FDExsaibt26mDlzJoYMGQI7Ozv4+PggKSkJp0+fxogRI/Ksy9PTE927d0dAQACMjIwwadIkTJw4EQYGBvDw8EBsbCyuXbuGAQMGFBiTlZUVfH19MWHCBHh5eaFq1aq5tvnhhx9Qs2ZN1K1bF4sXL8bz58/Rv39/AICTkxMUCgX27t2Lzp07w9jYGKamZXtStb0bbQEAE3rUVCsft/gevD6Ng4GhEldDTfHr6opITtCFpW0m3FolY/Fvt2Bpy8GwUjm+xwoWNlnoM+ExrCpm4vY1Y0ztXR3xT3m3UHHg+S5ZH/S4CwD4ZoV6t83i2e44vM9RjpBKLSVQpAHa+dUBoEg9GwEBAdi7dy9OnDih9t1ob2+PjIwMxMfHq7UuxcTEwN7evtAxMVnKh7m5OU6cOIElS5YgMTERTk5OWLhwoWqyybS0NCxevBjjx4+Hra0tevbsmW9dkZGRePr0qer1tGnToKenh+nTp+PRo0eoXLkyhgwZUqi4BgwYgK1bt6oSoNfNnz8f8+fPx8WLF+Hq6oo9e/bA1jY7oahSpQoCAwMxefJk9OvXD3369FF165VVBx5dLHC9jX0m5vx0u2SCKef2rLfFnvW2codRbvB8l5wPWneROwTKhxACI0aMwK+//opjx46hevXqauubNm0KfX19hISEqG5+Cg8Px71799TG+L6JQgjB24HKkM2bN2PMmDF49OiRqlsNyJ5HqXr16rhw4QIaNWok6TETExNhYWGB5zddYG7GntuS4O3QSO4QiIqVnhNbZEpKpjIdh++tQEJCQrGNQc35ngg+3xzGppq1w7xIzsTQJv8UKt5hw4Zh69at+O2331C7dm1VuYWFhWqM8NChQ7Fv3z5s2LAB5ubmql6gM2fOFDomtiyVEampqYiOjsb8+fPx5ZdfqiVKREREpYEUjyspyv7BwcEAgHfeeUetfP369aqJlxcvXgwdHR306NED6enp8Pb2xooVK4oUE5OlMmLBggWYO3cu2rdv/8ZBbkREROVBYTrHjIyM8MMPP+CHH3546+MwWSojZs6ciZkzZ+a73tnZuVAXDRERUXFRQgElNB3gLf2UOJpiskRERESSKOluuJLCZImIiIgkIc3jTkpfslT6IiIiIiIqRdiyRERERJJQCgWUmk5KqeH+xYHJEhEREUlCKUE3nLIUdnqVvoiIiIiIShG2LBEREZEklEIHSg3vZtN0/+LAZImIiIgkkQUFsjScJ0nT/YtD6UvfiIiIiEoRtiwRERGRJNgNR0RERFSALGjejZYlTSiSKn3pGxEREVEpwpYlIiIikgS74YiIiIgKwAfpEhERERVAQAGlhmOWBKcOICIiIipb2LJEREREkmA3HBEREVEBlEIBpdCsG03T/YtD6UvfiIiIiEoRtiwRERGRJLKggywN22E03b84MFkiIiIiSbAbjoiIiKgcYssSERERSUIJHSg1bIfRdP/iwGSJiIiIJJElFMjSsBtN0/2LQ+lL34iIiIhKEbYsERERkSS0dYA3kyUiIiKShBA6UGo4A7fgDN5ERESkrbKgQJaGD8LVdP/iUPrSNyIiIqJShC1LREREJAml0HzMkVJIFIyEmCwRERGRJJQSjFnSdP/iUPoiIiIiIipF2LJEREREklBCAaWGA7Q13b84MFkiIiIiSXAGbyIiIqJyiC1LVGgfd3ofejqGcodRLgTe3i13COXOrCbvyh1CuSISEuUOodwQIqPEjqWtA7yZLBEREZEklJDgcSelcMxS6UvfiIiIiEoRtiwRERGRJIQEd8OJUtiyxGSJiIiIJKEUEnTDlcK74ZgsERERkSS0dYB36YuIiIiIqBRhyxIRERFJgt1wRERERAXQ1sedsBuOiIiIqABsWSIiIiJJsBuOiIiIqADamiyxG46IiIioAGxZIiIiIkloa8sSkyUiIiKShLYmS+yGIyIiIioAW5aIiIhIEgKaz5MkpAlFUkyWiIiISBLa2g3HZImIiIgkoa3JEscsERERERWALUtEREQkCW1tWWKyRERERJLQ1mSJ3XBEREREBWDLEhEREUlCCAWEhi1Dmu5fHJgsERERkSSUUGg8z5Km+xcHdsMRERERFYAtS0RERCQJbR3gzWSJiIiIJKGtY5bYDUdERERUALYsERERkSTYDUdERERUAG3thmOyRERERJIQErQslcZkiWOWiIiIiArAZImIiIgkIQAIoeFSxGOeOHECXbt2hYODAxQKBXbv3q22vm/fvlAoFGrL+++/X6RjsBuOiIiIJKGEAooSnsE7JSUF7u7u6N+/P3x9ffPc5v3338f69etVrw0NDYt0DCZLREREVGb5+PjAx8enwG0MDQ1hb2//1sdgNxwRERFJIuduOE0XAEhMTFRb0tPT3zquY8eOwc7ODrVr18bQoUPx7NmzIu3PZImIiIgkkTPPkqYLADg6OsLCwkK1BAUFvVVM77//PjZt2oSQkBB88803OH78OHx8fJCVlVXoOtgNR0RERKXO/fv3YW5urnpd1HFGOXr16qX6fzc3NzRs2BA1atTAsWPH4OnpWag62LJEREREktD4Trj/XwDA3NxcbXnbZOl1Li4usLW1RURERKH3YcsSERERSaIszOD94MEDPHv2DJUrVy70PkyWiIiIqMxKTk5WayWKiorCxYsXYW1tDWtrawQGBqJHjx6wt7dHZGQkJk6cCFdXV3h7exf6GGUyWVIoFPj111/RrVu3t9r/2LFj6NixI54/fw5LS0tJYyspmp4DbfVxnwi06RCNqk7JyEjXRdgVK6xfURcP75nKHZpWOLHCHmEHLPH0thH0jZRwbJKC9yY9gK3Lf3ep/Ps/W1zZY43oayZIT9bF5IsXYWxe+IGU9GYNmsajR/8HcK2fDBu7DMweUQ9nQ2zlDktr8XwXnhwtS//++y86duyoej127FgAgL+/P4KDg3H58mVs3LgR8fHxcHBwgJeXF2bPnl2kbr0ymSxFR0fDyspK7jBU5Ei+Sts5KC3cGj/DHzudcTPMErq6Av5DbmDOklAM+awD0tPK5OVeqtz92xQtvohFlYYpUGYpcPjbKtjUpyYCDl6HgYkSAPDyhQ5c2yfAtX0CDn9bVeaItZORiRJR4RVwcJc9pi27Lnc4Wo/nu/CUQgGFhslSUZ8t984770CI/Of9PnDggEbxAGU0WdJkYik5ZWRkwMDAQJK6yuo5KG7Tx7RUe71ojjv+9+chuNZJwLWLNjJFpT2+2KA+ILL7t3ewoLk7Hl01gXOLZABA6/5PAABRf7E1r7j8e9Ia/560ljuMcoPnu/BeHaCtSR2ljax3w+3YsQNubm4wNjaGjY0NOnXqhJSUFADAunXrUL9+fRgaGqJy5coICAhQ7ZfXs19epVQqERQUhOrVq8PY2Bju7u7YsWNHgbGcOnUK7dq1g7GxMRwdHTFy5EhVLACQnp6OSZMmwdHREYaGhnB1dcXatWtx584dVfOflZUVFAoF+vbtCyA72w0ICMDo0aNha2ur6h89fvw4WrRooXpvkydPRmZmpupY77zzDkaOHImJEyfC2toa9vb2mDlzplq8r5+DBw8ewM/PD9bW1qhQoQKaNWuG0NBQAMClS5fQsWNHmJmZwdzcHE2bNsW///5b4PnQFhVMs89rcqK+zJFop7QkXQCAsUXmG7YkIiq7ZGtZio6Ohp+fHxYsWIDu3bsjKSkJJ0+ehBACwcHBGDt2LObPnw8fHx8kJCTg9OnTha47KCgIP/30E1auXImaNWvixIkT+Pzzz1GxYkV06NAh1/aRkZF4//33MWfOHKxbtw6xsbEICAhAQECA6lkyffr0wdmzZ7F06VK4u7sjKioKT58+haOjI3bu3IkePXogPDwc5ubmMDY2VtW9ceNGDB06VBX/w4cP0blzZ/Tt2xebNm3CjRs3MGjQIBgZGaklRBs3bsTYsWMRGhqKs2fPom/fvvDw8MB7772XK/7k5GR06NABVapUwZ49e2Bvb4/z589DqczuFunduzcaN26M4OBg6Orq4uLFi9DXzz95SE9PV5spNTExsdDnvjRRKAQGj76Ga5escPe2+Zt3oCJRKoH9s6uiWtNkVKqdJnc4RFQKZLcsaTpmSaJgJCRrspSZmQlfX184OTkByJ4sCgDmzJmDcePGYdSoUartmzdvXqh609PTMW/ePBw+fBitW7cGkD2nwqlTp/Djjz/mmSwFBQWhd+/eGD16NACgZs2aWLp0KTp06IDg4GDcu3cPP//8Mw4dOoROnTqp6sxhbZ3dPGtnZ5drzFLNmjWxYMEC1eupU6fC0dERy5cvh0KhQJ06dfDo0SNMmjQJ06dPh45OdmNfw4YNMWPGDFUdy5cvR0hISJ7J0tatWxEbG4t//vlHFYurq6tq/b179zBhwgTUqVNHVV9BgoKCEBgYWOA2ZcHQ8Vfh5JKECV+2kTsUrfTH9Gp4ctMY/X8OlzsUIiolysLUAW9DtmTJ3d0dnp6ecHNzg7e3N7y8vNCzZ0+8fPkSjx49KvSsmq+LiIhAampqrqQiIyMDjRs3znOfS5cu4fLly9iyZYuqTAgBpVKJqKgoXLlyBbq6unkmWm/StGlTtddhYWFo3bo1FIr/LgYPDw8kJyfjwYMHqFatGoDsZOlVlStXxpMnT/I8xsWLF9G4cWNVovS6sWPHYuDAgdi8eTM6deqEjz/+GDVq1Mg35ilTpqjuJgCyW5YcHR0LfqOlzJBxV9DCIwaThrbBs1jjN+9ARfLHDEfcPGqB/tvCYVH5pdzhEBEVK9mSJV1dXRw6dAhnzpzBwYMHsWzZMkydOhUhISEa1ZucnD3I9I8//kCVKlXU1uV3m2BycjK+/PJLjBw5Mte6atWqFWmWz9dVqFDhrfZ7vZtMoVCoutVe92q3X15mzpyJzz77DH/88Qf+/PNPzJgxA9u2bUP37t3z3N7Q0FCymVJLnsCQcVfRusNjTBnWGjHRJnIHpFWEAPbNdETYQUv023oTVo4ZcodERKWI+P9F0zpKG1nvhlMoFPDw8ICHhwemT58OJycnHDp0CM7OzggJCVGbN6Gw6tWrB0NDQ9y7d6/QLUFNmjTB9evX1bquXuXm5galUonjx4+ruuFelXOHW2Eeyle3bl3s3LkTQghV69Lp06dhZmaGqlXf7jbrhg0bYs2aNYiLi8u3dalWrVqoVasWxowZAz8/P6xfvz7fZKksGzb+Kjp4PcTsSc3xIlUPVtbZY2lSUvSRka4rc3Rl3x/THXFljzX8VkXCwDQLSbHZ/4QYmWVB3yj7n7ikWD0kx+oj7m52wv3khjEMTLNg4ZABE0vOtyQFI5MsOFR7oXpdqUoaXOokIylBD7HRRjJGpp14vguP3XASCw0NRUhICLy8vGBnZ4fQ0FDExsaibt26mDlzJoYMGQI7Ozv4+PggKSkJp0+fxogRI/Ksy9PTE927d0dAQADMzMwwfvx4jBkzBkqlEm3btlUNEDc3N4e/v3+u/SdNmoRWrVohICAAAwcORIUKFXD9+nUcOnQIy5cvh7OzM/z9/dG/f3/VAO+7d+/iyZMn+OSTT+Dk5ASFQoG9e/eic+fOMDY2hqlp3rdNDxs2DEuWLMGIESMQEBCA8PBwzJgxA2PHjlWNVyoqPz8/zJs3D926dUNQUBAqV66MCxcuwMHBAY0aNcKECRPQs2dPVK9eHQ8ePMA///yDHj16vNWxSrsPetwFAHyz4qxa+eLZ7ji8r2x1JZZG/2yxAwCs96utVt5twR007vkMAPDvloo4ttRBtW5dr9q5tiHN1KyfhG82Xla9Hjz5NgDg0K+VsHhq7fx2o7fE802yJUvm5uY4ceIElixZgsTERDg5OWHhwoXw8fEBAKSlpWHx4sUYP348bG1t0bNnz3zrioyMxNOnT1WvZ8+ejYoVKyIoKAi3b9+GpaUlmjRpgq+++irP/Rs2bIjjx49j6tSpaNeuHYQQqFGjBj799FPVNsHBwfjqq68wbNgwPHv2DNWqVVPVV6VKFQQGBmLy5Mno168f+vTpgw0bNuR5rCpVqmDfvn2YMGEC3N3dYW1tjQEDBuDrr78u6ilUMTAwwMGDBzFu3Dh07twZmZmZqFevHn744Qfo6uri2bNn6NOnD2JiYmBrawtfX1+tGMCdlw9ad5E7BK0WePvcG7fpODoaHUdHl0A05deVfyzRuV57ucMoN3i+i0BL++EUoqBpL4mQPcDbwsICnaoNg55OWR3LVLZMO7pb7hDKnVlN3pU7BKJikSkyEBK/GQkJCTA3L55pVHK+J1w2TIWOiWZdk8rUNNzuO7dY4y0qWSelJCIiIirtyuTjToiIiKj00dbHnTBZIiIiIknwbjgiIiKigghF9qJpHaUMxywRERERFYAtS0RERCQJjlkiIiIiKoiWzrPEbjgiIiKiAhSqZWnPnj2FrvDDDz9862CIiIio7CrXd8N169atUJUpFIpCPUyWiIiItFQp7EbTVKGSJaVSWdxxEBEREZVKGg3wTktLg5GRZs+AISIiIu2grd1wRR7gnZWVhdmzZ6NKlSowNTXF7du3AQDTpk3D2rVrJQ+QiIiIyggh0VLKFDlZmjt3LjZs2IAFCxbAwMBAVd6gQQOsWbNG0uCIiIiI5FbkZGnTpk1YtWoVevfuDV1dXVW5u7s7bty4IWlwREREVJYoJFpKlyKPWXr48CFcXV1zlSuVSrx8+VKSoIiIiKgM4qSU2erVq4eTJ0/mKt+xYwcaN24sSVBERERUBmnpmKUityxNnz4d/v7+ePjwIZRKJXbt2oXw8HBs2rQJe/fuLY4YiYiIiGRT5Jaljz76CL///jsOHz6MChUqYPr06QgLC8Pvv/+O9957rzhiJCIiorJAKKRZSpm3mmepXbt2OHTokNSxEBERURkmRPaiaR2lzVtPSvnvv/8iLCwMQPY4pqZNm0oWFBEREVFpUeRk6cGDB/Dz88Pp06dhaWkJAIiPj0ebNm2wbds2VK1aVeoYiYiIqCzg3XDZBg4ciJcvXyIsLAxxcXGIi4tDWFgYlEolBg4cWBwxEhERUVnAMUvZjh8/jjNnzqB27dqqstq1a2PZsmVo166dpMERERERya3IyZKjo2Oek09mZWXBwcFBkqCIiIio7FGI7EXTOkqbInfDffvttxgxYgT+/fdfVdm///6LUaNG4bvvvpM0OCIiIipDyvOklFZWVlAo/utDTElJQcuWLaGnl717ZmYm9PT00L9/f3Tr1q1YAiUiIiKSQ6GSpSVLlhRzGERERFTmSTFAu6wO8Pb39y/uOIiIiKis09KpA956UkoASEtLQ0ZGhlqZubm5RgERERFRGaWlyVKRB3inpKQgICAAdnZ2qFChAqysrNQWIiIiIm1S5GRp4sSJOHLkCIKDg2FoaIg1a9YgMDAQDg4O2LRpU3HESERERGVBeb4b7lW///47Nm3ahHfeeQf9+vVDu3bt4OrqCicnJ2zZsgW9e/cujjiJiIiotNPSAd5FblmKi4uDi4sLgOzxSXFxcQCAtm3b4sSJE9JGR0RERCSzIidLLi4uiIqKAgDUqVMHP//8M4DsFqecB+sSERFR+ZMzg7emS2lT5GSpX79+uHTpEgBg8uTJ+OGHH2BkZIQxY8ZgwoQJkgdIREREZQTHLGUbM2aM6v87deqEGzdu4Ny5c3B1dUXDhg0lDY6IiIhIbhrNswQATk5OcHJykiIWIiIiolKnUMnS0qVLC13hyJEj3zoYIiIiKrsU0HzMUem7F66QydLixYsLVZlCoWCypMUy7z0EFPpyh1EuzO7YTe4Qyp3p53fLHUK5wmu85CiU6UC83FGUbYVKlnLufiMiIiLKl5bOs6TxmCUiIiIiAFr7bDgmS0RERCQNLU2WijzPEhEREVF5wpYlIiIikoQUM3CXxhm8mSwRERGRNNgN95+TJ0/i888/R+vWrfHw4UMAwObNm3Hq1ClJgyMiIiKSW5GTpZ07d8Lb2xvGxsa4cOEC0tPTAQAJCQmYN2+e5AESERFRGaGlz4YrcrI0Z84crFy5EqtXr4a+/n8TFHp4eOD8+fOSBkdERERlR86YJU2X0qbIyVJ4eDjat2+fq9zCwgLx8fFSxERERERUahQ5WbK3t0dERESu8lOnTsHFxUWSoIiIiKgMypnBW9OllClysjRo0CCMGjUKoaGhUCgUePToEbZs2YLx48dj6NChxREjERERlQVaOmapyFMHTJ48GUqlEp6enkhNTUX79u1haGiI8ePHY8SIEcURIxEREZFsipwsKRQKTJ06FRMmTEBERASSk5NRr149mJqaFkd8REREVEZwUsrXGBgYoF69elLGQkRERGWZlk5KWeRkqWPHjlAo8h98deTIEY0CIiIiojJKilv/tSFZatSokdrrly9f4uLFi7h69Sr8/f2liouIiIioVChysrR48eI8y2fOnInk5GSNAyIiIqIySku74d7q2XB5+fzzz7Fu3TqpqiMiIqKyRkunDpAsWTp79iyMjIykqo6IiIioVChyN5yvr6/aayEEoqOj8e+//2LatGmSBUZERERlixxTB5w4cQLffvstzp07h+joaPz666/o1q2bar0QAjNmzMDq1asRHx8PDw8PBAcHo2bNmoU+RpFbliwsLNQWa2trvPPOO9i3bx9mzJhR1OqIiIiI3lpKSgrc3d3xww8/5Ll+wYIFWLp0KVauXInQ0FBUqFAB3t7eSEtLK/QxitSylJWVhX79+sHNzQ1WVlZF2ZWIiIhIcj4+PvDx8clznRACS5Yswddff42PPvoIALBp0yZUqlQJu3fvRq9evQp1jCK1LOnq6sLLywvx8fFF2Y2IiIjKAwkHeCcmJqot6enpRQ4nKioKjx8/RqdOnVRlFhYWaNmyJc6ePVvoeorcDdegQQPcvn27qLsRERGRlssZs6TpAgCOjo5qw36CgoKKHM/jx48BAJUqVVIrr1SpkmpdYRR5gPecOXMwfvx4zJ49G02bNkWFChXU1pubmxe1SiIiIiI19+/fV8spDA0NZYul0MnSrFmzMG7cOHTu3BkA8OGHH6o99kQIAYVCgaysLOmjJCIiorJBonmSzM3NNW6Asbe3BwDExMSgcuXKqvKYmJhcTyQpSKGTpcDAQAwZMgRHjx4tfJRERERUfpSyGbyrV68Oe3t7hISEqJKjxMREhIaGYujQoYWup9DJkhDZ0Xfo0KFokRIREVG5IMc8S8nJyYiIiFC9joqKwsWLF2FtbY1q1aph9OjRmDNnDmrWrInq1atj2rRpcHBwUJuL6U2KNGbp1W43IiIiIrn9+++/6Nixo+r12LFjAQD+/v7YsGEDJk6ciJSUFAwePBjx8fFo27Yt9u/fX6SnjhQpWapVq9YbE6a4uLiiVElERETaQoZuuHfeeUfV+5UXhUKBWbNmYdasWW8dUpGSpcDAQFhYWLz1wYiIiEh7ydENVxKKlCz16tULdnZ2xRULERERUalT6GSJ45WIiIioQKXsbjipFPluOCIiIqI8lfdkSalUFmccRERERKVSkR93QkRERJQXDvAmIiIiKoiWdsPpyB0AERERUWnGliUiIiKShpa2LDFZIq3Ute9T9Bz6BNYVM3H7ujFWfF0F4RdN5A5LK33cJwJtOkSjqlMyMtJ1EXbFCutX1MXDe6Zyh6YVTqywR9gBSzy9bQR9IyUcm6TgvUkPYOuSrtrm3//Z4soea0RfM0F6si4mX7wIY/MsGaPWLrzGC09bxyyxG66EKBQK7N69W+4wAGRPDT969Gi5wyg2HT58jsEzHmHLInsM966F29eNMHfrbVjYvJQ7NK3k1vgZ/tjpjHGD2uLrUa2gpycwZ0koDI0y5Q5NK9z92xQtvojFoJ030GfTLWS9VGBTn5rISP3vn++XL3Tg2j4B7YZGyxip9uI1XgRCoqWUYctSCYmOjoaVlZXcYZQLvoOfYv9Waxzcbg0AWDqpKlp4JsLbLw4/L68kc3TaZ/qYlmqvF81xx//+PATXOgm4dtFGpqi0xxcbItRed//2DhY0d8ejqyZwbpEMAGjd/wkAIOovtnQUB17jxJalEmJvbw9DQ0O5w9B6evpK1GyYivMnzVRlQihw4aQZ6jVNlTGy8qOCafav7eREfZkj0U5pSboAAGMLtmrIhdd4/nK64TRdShsmS0W0Y8cOuLm5wdjYGDY2NujUqRNSUlIAAOvWrUP9+vVhaGiIypUrIyAgQLXfm7rh3nnnHYwYMQKjR4+GlZUVKlWqhNWrVyMlJQX9+vWDmZkZXF1d8eeff6rtd/XqVfj4+MDU1BSVKlXCF198gadPn6rWp6SkoE+fPjA1NUXlypWxcOFCaU9IKWNunQVdPSA+Vr3R9PlTPVhV5JdLcVMoBAaPvoZrl6xw97a53OFoHaUS2D+7Kqo1TUal2mlyh1Mu8Rp/Ay3thmOyVATR0dHw8/ND//79ERYWhmPHjsHX1xdCCAQHB2P48OEYPHgwrly5gj179sDV1bVI9W/cuBG2trb4+++/MWLECAwdOhQff/wx2rRpg/Pnz8PLywtffPEFUlOzW0ji4+Px7rvvonHjxvj333+xf/9+xMTE4JNPPlHVOWHCBBw/fhy//fYbDh48iGPHjuH8+fMFxpGeno7ExES1hagwho6/CieXJHwzrYncoWilP6ZXw5Obxui59LbcoZRbvMbLJ45ZKoLo6GhkZmbC19cXTk5OAAA3NzcAwJw5czBu3DiMGjVKtX3z5s2LVL+7uzu+/vprAMCUKVMwf/582NraYtCgQQCA6dOnIzg4GJcvX0arVq2wfPlyNG7cGPPmzVPVsW7dOjg6OuLmzZtwcHDA2rVr8dNPP8HT0xNAdkJWtWrVAuMICgpCYGBgkWIvLRLjdJGVCVi+1opkZZuJ57G83IvTkHFX0MIjBpOGtsGzWGO5w9E6f8xwxM2jFui/LRwWlXmzghx4jReClk4dwJalInB3d4enpyfc3Nzw8ccfY/Xq1Xj+/DmePHmCR48eqRKSt9WwYUPV/+vq6sLGxkaVjAFApUrZg5OfPMkezHnp0iUcPXoUpqamqqVOnToAgMjISERGRiIjIwMtW/43ONHa2hq1a9cuMI4pU6YgISFBtdy/f1+j91WSMl/q4NZlEzRum6QqUygEGrVNxvVznDqgeAgMGXcFrTs8xlcBrRATzfMsJSGyE6Wwg5bo+9NNWDlmyB1SOcRrvLAUEi2lDX9qF4Guri4OHTqEM2fO4ODBg1i2bBmmTp2KkJAQSerX11cfLKhQKNTKFIrsSyjnocbJycno2rUrvvnmm1x1Va5cGREREbnKC8PQ0LBMD0bftcoW45fcx81LJgi/YILug2JhZKLEwW3WcoemlYaNv4oOXg8xe1JzvEjVg5V19lialBR9ZKTryhxd2ffHdEdc2WMNv1WRMDDNQtL/t5AamWVB3yj7J3hSrB6SY/URdzf7c/vkhjEMTLNg4ZABE0vOt6QpXuPEZKmIFAoFPDw84OHhgenTp8PJyQmHDh2Cs7MzQkJC0LFjxxKLpUmTJti5cyecnZ2hp5f7T1mjRg3o6+sjNDQU1apVAwA8f/4cN2/eRIcOHUoszpJ2fI8VLGyy0GfCY1hVzMTta8aY2rs64p/yzpXi8EGPuwCAb1acVStfPNsdh/c5yhGSVvlnix0AYL2feotwtwV30LjnMwDAv1sq4thSB9W6db1q59qG3h6v8SLQ0m44JktFEBoaipCQEHh5ecHOzg6hoaGIjY1F3bp1MXPmTAwZMgR2dnbw8fFBUlISTp8+jREjRuRZl6enJ7p37652x1xRDR8+HKtXr4afnx8mTpwIa2trREREYNu2bVizZg1MTU0xYMAATJgwATY2NrCzs8PUqVOho6P9va971ttiz3pbucMoFz5o3UXuELRa4O1zb9ym4+hodBzNCSmLC6/xwtPWGbyZLBWBubk5Tpw4gSVLliAxMRFOTk5YuHAhfHx8AABpaWlYvHgxxo8fD1tbW/Ts2TPfuiIjI9Vu8X8bDg4OOH36NCZNmgQvLy+kp6fDyckJ77//vioh+vbbb1XddWZmZhg3bhwSEhI0Oi4REVF5ohBClMIcjkqTxMREWFhY4B18BD0Fu7JKgp4Tm/ZL2rSju+UOoVyZ3bGb3CGUG5nKdBy+twIJCQkwNy+euaFyvifqfzkPuoZGGtWVlZ6Gaz9+VazxFhVbloiIiEg6WtgEw2SJiIiIJKGtY5a0f6QvERERkQbYskRERETS4NQBRERERPljNxwRERFROcSWJSIiIpIGu+GIiIiI8sduOCIiIqJyiC1LREREJA12wxEREREVQEuTJXbDERERERWALUtEREQkCW0d4M1kiYiIiKShpd1wTJaIiIhIEgohoBCaZTua7l8cOGaJiIiIqABsWSIiIiJpsBuOiIiIKH/aOsCb3XBEREREBWDLEhEREUmD3XBERERE+WM3HBEREVE5xJYlIiIikga74YiIiIjyx244IiIionKILUtEREQkDXbDERERERWsNHajaYrJEhEREUlDiOxF0zpKGY5ZIiIiIioAW5aIiIhIEtp6NxyTJSIiIpKGlg7wZjccERERUQHYskRERESSUCizF03rKG2YLBEREZE02A1HREREVP6wZYmIiIgkwbvhiIiIiArCSSmJiIiIyh+2LBERAZjh0lTuEMqVA49+lzuEciMxSQmrWiVzLHbDERERERVES++GY7JEREREktDWliWOWSIiIiIqAFuWiIiISBpaejcc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w8PRvn37XOUWFhaIj48v+YCIiIoBkyUiemv29vaIiIjIVX7q1Cm4uLjIEBERkfSYLBHRWxs0aBBGjRqF0NBQKBQKPHr0CFu2bMH48eMxdOhQucMjIpIE51kiorc2efJkKJVKeHp6IjU1Fe3bt4ehoSHGjx+PESNGyB0eEZEkOM8SEWksIyMDERERSE5ORr169WBqaip3SEREkmGyRERERFQAjlkiIsmtWLECs2bNkjsMIiJJsGWJiCTn6emJqKgo3L59W+5QiIg0xmSJiIiIqADshiMiIiIqAKcOIKIi2bNnD3x8fKCvr489e/YUuO2HH35YQlERERUfdsMRUZHo6Ojg8ePHsLOzg45O/o3TCoUCWVlZJRgZEVHxYLJEREREVACOWSIiIiIqAJMlInprI0eOxNKlS3OVL1++HKNHjy75gIiIigGTJSJ6azt37oSHh0eu8jZt2mDHjh0yREREJD0mS0T01p49ewYLC4tc5ebm5nj69KkMERERSY/JEhG9NVdXV+zfvz9X+Z9//gkXFxcZIiIikh7nWSKitzZ27FgEBAQgNjYW7777LgAgJCQE3333Hb7//nuZoyMikganDiAijQQHB2Pu3Ll49OgRAKB69eqYMWMG+vTpI3NkRETSYLJERG/txYsXEELAxMQEsbGxiImJwaFDh1CvXj14e3vLHR4RkSQ4ZomI3tpHH32ETZs2AQD09fXRqVMnLFq0CN26dUNwcLDM0RERSYPJEhG9tfPnz6Ndu3YAgB07dqBSpUq4e/cuNm3alOf8S0REZRGTJSJ6a6mpqTAzMwMAHDx4EL6+vtDR0UGrVq1w9+5dmaMjIpIGkyUiemuurq7YvXs37t+/jwMHDsDLywsA8OTJE5ibm8scHRGRNJgsEdFbmz59OsaPHw9nZ2e0bNkSrVu3BpDdytS4cWOZoyMikgbvhiMijTx+/BjR0dFwd3eHjk7276+///4b5ubmqFOnjszRERFpjskSERERUQHYDUdERERUACZLRERERAVgskRERERUACZLRERERAVgskREZULfvn3RrVs31et33nkHo0ePLvE4jh07BoVCgfj4+Hy3USgU2L17d6HrnDlzJho1aqRRXHfu3IFCocDFixc1qoeIcmOyRERvrW/fvlAoFFAoFDAwMICrqytmzZqFzMzMYj/2rl27MHv27EJtW5gEh4goP3py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",
            "text/plain": [
              "<Figure size 640x480 with 2 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "import sklearn.metrics as skmetrics\n",
        "\n",
        "cm = skmetrics.confusion_matrix(y_val, y_hat)\n",
        "disp = skmetrics.ConfusionMatrixDisplay(confusion_matrix=cm,\n",
        "                              display_labels=labels_dict.keys())\n",
        "disp.plot(xticks_rotation='vertical')\n",
        "plt.title('Confusion matrix for newsgroup test dataset');\n",
        "plt.grid(False)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "daba248860c4"
      },
      "source": [
        "## Next steps\n",
        "\n",
        "You've now created your own text classification! To learn how to use other services in the Gemini API, see the [Get started](../quickstarts/Get_started.ipynb) guide."
      ]
    }
  ],
  "metadata": {
    "colab": {
      "name": "Classify_text_with_embeddings.ipynb",
      "toc_visible": true
    },
    "google": {
      "image_path": "/examples/train_text_classifier_embeddings_files/output_3ae76701e178_0.png",
      "keywords": [
        "examples",
        "googleai",
        "samplecode",
        "python",
        "embed"
      ]
    },
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}
